Ember.js - 错误 - “断言失败:你必须在传递给`push`的哈希中包含一个`id`”

时间:2013-12-31 02:40:59

标签: ember.js

我通过使用Express编写的REST API将帖子(标题,文本)保存到mongodb数据库并刷新浏览器后出现此错误。我已经将主键设置为'_id',并且已经阅读了有关可能正常化数据的内容?

以下是服务器的有效负载(db中只有1个帖子):

{
  "posts": [
  {
    "title": "The Title",
    "text": "Lorem ipsum",
    "_id": "52c22892381e452d1d000010",
    "__v": 0
   }
  ]
}

控制器:

App.PostsController = Ember.ArrayController.extend({
    actions: {
      createPost: function() {
        // Dummy content for now
        var to_post = this.store.createRecord('post', {
          title: 'The Title',
          text: 'Lorem ipsum'
        });
        to_post.save();
      }
    } 
 });

模特:

App.Post = DS.Model.extend({
   title: DS.attr('string'),
   text: DS.attr('string')
});

串行:

App.MySerializer = DS.RESTSerializer.extend({
  primaryKey: function(type){
    return '_id';
  }
});

适配器:

App.ApplicationAdapter = DS.RESTAdapter.extend({
  namespace: 'api'
});

非常感谢任何帮助!如果您需要任何其他信息,请告诉我。 感谢

2 个答案:

答案 0 :(得分:11)

使用自定义适配器/序列化程序时,命名很重要。如果您希望它应用于整个应用程序,则应将其称为ApplicationSerializer

App.ApplicationSerializer = DS.RESTSerializer.extend({
  primaryKey: '_id'
});

适配器:

App.ApplicationAdapter = DS.RESTAdapter.extend({
  namespace: 'api'
});

如果您只想将它​​应用于单个模型(这也适用于适配器)

App.PostSerializer = DS.RESTSerializer.extend({
  primaryKey: '_id'
});

答案 1 :(得分:0)

我有同样的错误,但经过一些调试发现它是由我的其余API没有返回保存的对象json引起的。