我目前正在使用EmberJs和Ember-Data构建一个由Laravel JSON api支持的应用程序。
我在保存过程中遇到了一些问题,主要是模型创建。
这是我的工作流程:
this.get("model").save()
问题在于:id
仍未定义,即使已经给出了......
我找到的解决方法是重新加载模型......但考虑到我希望在save()
任何想法?
编辑**
问题只发生在我添加的第一个对象上。当我重复该过程时,正确刷新下一个对象。如果我点击刷新,它会再次启动:第一个对象错过了他的刷新,以下是可以的。
这里是关于添加过程的代码:
路线
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");
}
}
});
编辑** 2 我尝试了下面提供的代码但没有成功......
我添加了2条记录,第一条没有它的ID ...第二条记录了,所以问题似乎只出现在第一次保存...
以下是我从API获得的2个回复
对象A
{"category":{"nameFr":"aaa","nameEn":"aaa","active":true,"id":10}}
对象B
{"category":{"nameFr":"bbb","nameEn":"bbb","active":true,"id":11}}
答案 0 :(得分:1)
可能是因为您在保存完成之前进行了转换,因此类别路径上的模型挂钩会在您保存的模型仍处于运行状态时触发(您是否在控制台中收到任何错误?)。尝试将保存操作更改为
save: function()
{
var that = this;
this.get("model").save().then(function(){
that.get("target").transitionTo("categories");
});
},
此外,由于存在控制器方法this.get('target')...
,因此您不需要transitionToRoute
。您可以简化为:
save: function()
{
var that = this;
this.get("model").save().then(function(){
that.transitionToRoute("categories");
});
},
答案 1 :(得分:0)
发现问题似乎出现在Ember-Data的一面......
在这里记录了整个事情:
http://discuss.emberjs.com/t/missing-id-on-first-save-on-a-new-object/4752