使用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的提示。这是我的问题的一些细节。
答案 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"
}
}