我目前正在使用EmberJs和Ember-Data来构建一个由Laravel JSON api支持的应用程序。
我在保存过程中遇到了一个小问题,主要是在模型创建上。
以下是我的工作流程:
- Ember对象控制器将自身保存为
this.get("model").save()
- Laravel(REST api)接收数据并将其持久化,从而为其创建一个唯一ID
- api返回具有正确ID的新数据(遵守Ember约定)
- Ember-Data似乎并不关心响应,因为它什么也不做...
问题就在这里:id
仍然是未定义的,即使它已经被给定...
我发现的变通办法是重新加载模型...但考虑到我想要重新加载的数据直接在save()
后提供给Ember,这是一个很大的性能缺陷
有什么主意吗?
编辑**
问题只出现在我添加的第一个对象上。当我重复该过程时,下一个对象将正确刷新。如果我点击刷新,它将再次开始:第一个对象错过了他的刷新,接下来的就没问题了。
下面是我关于add过程的代码:
路线
App.CategoriesNewRoute = Ember.Route.extend({
model: function()
{
return this.store.createRecord("category").set("active", true);
},
setupController: function(ctrl, model)
{
ctrl.set("errors", 0);
ctrl.set("model", model);
}
});
我没有CategoriesRoute
的路由器,因为数据从一开始就都在我的ArrayController中。
控制器
App.CategoriesNewController = Ember.ObjectController.extend({
needs: "application",
actions:
{
save: function()
{
this.get("model").save();
this.get("target").transitionTo("categories");
},
cancel: function()
{
this.get("model").rollback();
this.get("target").transitionTo("categories");
}
}
});
**EDIT****2我尝试了下面提供的代码,但没有成功...
我添加了2条记录,第一条记录没有ID...第二条记录有ID,因此问题似乎只出现在第一次保存时...
下面是我从API中得到的两个响应
对象A
{"category":{"nameFr":"aaa","nameEn":"aaa","active":true,"id":10}}
对象B
{"category":{"nameFr":"bbb","nameEn":"bbb","active":true,"id":11}}
2条答案
按热度按时间6xfqseft1#
这可能是因为您在保存完成之前进行了转换,因此在您正在保存的模型仍在运行时触发了类别路径上的模型挂钩(您在控制台中收到任何错误了吗?)。
另外,你不需要
this.get('target')...
,因为有一个控制器方法transitionToRoute
。你可以简化为:0wi1tuuw2#
发现问题似乎出在Ember-Data这边...
把整件事记录在这里
http://discuss.emberjs.com/t/missing-id-on-first-save-on-a-new-object/4752