Ember数据实体id生成

时间:2013-03-15 04:25:54

标签: ember.js ember-data

使用RESTAdapter创建并保存新模型时,其Id属性未定义,因为我的后端负责生成ID。因此,当我返回网格时,有两个相同的实体:第一个 - 使用空Id(来自RESTAdapter缓存,我认为),第二个 - 从后端返回正确的ID。

有什么想法吗?也许禁用RESTAdapter缓存是否可行?

更新

我的实体创建代码。

    submit:function () {
        var manager = App.store.createRecord(App.Manager, {
            firstName:this.get('firstName'),
            lastName:this.get('lastName'),
            speciality:this.get('speciality')
        });

        App.store.commit();

        this.get('controller').transitionTo('managers');
        return false;
    }

NEW UPDATE

感谢Mike Grassotti的提示。这是我的问题的一些细节。

  1. 一个人有Id,另一个人没有Id。
  2. 如果我删除了App.store.commit()代码,则没有POST到服务器,只显示没有Id的实体。
  3. 此实体的isLoaded = false且isError = true。

2 个答案:

答案 0 :(得分:3)

  

使用RESTAdapter创建并保存新模型时,其Id属性未定义,因为我的后端负责生成ID。

是的,但是没有什么不寻常之处 - ember期望id生成由后端完成。

  

因此,当我返回网格时,有两个相同的实体:第一个 - 使用空Id(来自RESTAdapter缓存,我认为),第二个 - 从后端返回正确的ID。

行。你是什​​么意思相同的2个实体 - 当然它们是不同的js对象。尝试将它们中的每一个记录到控制台,如下所示:

console.log(entityOne.toString());
console.log(entityTwo.toString());
  

有什么想法吗?

有很多事情可能会导致这种情况发生。听起来好像你正在创建两个新记录并只保存其中一个。或者可能是API响应与ember期望的不匹配,导致创建额外的记录。

  • 尝试启用记录日志,然后观察控制台,以便在模型保存时查看正在进行的操作。希望这能让您深入了解何时/如何创建额外记录。

    record.set(“stateManager.enableLogging”,true)

  • 检查浏览器与api的通信并比较JSON,看它是否与the ember rest adapter期望的匹配。

  • 将JSON和其他源代码(模型定义等)发布到Stack Overflow,也许第二组眼睛会有所帮助。

  • 查看此帖子以获取其他一些调试提示:http://www.akshay.cc/blog/2013-02-22-debugging-ember-js-and-ember-data.html

  

是否可以禁用RESTAdapter缓存?

RESTAdapter不维护模型对象的单独缓存。既然你没有尝试做任何特别的事情,就没有必要采取这样的步骤。

答案 1 :(得分:0)

非常感谢Mike Grassotti,我已经找到了我的问题的答案。

好问题是

  

回到App.store.commit()后,JSON的响应是什么   服务器看起来像?

+1该评论。

我在ember-data文档中找不到任何信息,所以有些链接对我有帮助。我改变了从后端返回的结果,现在一切正常。

{
  "manager": {
    "firstName": "test",
    "lastName": "test",
    "speciality": "test",
    "id": "acd325ac-03eb-419e-be8a-d4ac42e8c235"
  }
}