带有夹具适配器的 Ember-1.0.0 和 Ember Data 1.0 Beta 2。
我想要完成的是,在我打电话后,save
如果返回的承诺得到解决,我想转换到一条路线。
在这个 jsbin 中,您可以单击“新建”,输入一些内容,然后单击“创建”。转换发生,因此 promise fromsave
被解决,但是我们创建的新模型由于deactivate
钩子而被删除。
顺便说一句,在数据窗口上打开 chrome ember 检查器可能会有所帮助。
我的实现显然是错误的。我应该如何保存记录,然后在转换到路线之前等待承诺解决而不删除新创建的记录?
这是保存操作:
save: function() {
var self = this;
self.modelFor('thingsNew').save().then(function() {
self.transitionTo('things');
});
}
和停用钩子:
deactivate: function() {
var model = this.modelFor('thingsNew');
if(!model.get('isSaving')) {
model.deleteRecord();
}
}
其他一切请参见jsbin。
原因是当用户单击另一个链接或在单击创建按钮之前按下后退按钮时,deactivate
模型会被正确删除。thingsNew
例如,假设用户单击New
then Home
。该模型仍然存在。如果用户再次单击New
,则会创建一个新模型。现在我们有两个新模型。如果用户再次点击Home
then ,现在我们有三个模型。New
如果输入了有效的输入并且用户最终单击Create
,则有一个新的已保存模型和两个新的未保存模型仍在浮动。我认为甚至没有办法访问这些浮动模型了。
最后,如果我只调用这两个方法,那么模型将调用save
then 转换而不删除模型,但无论承诺是解决还是拒绝,它都会这样做。
model.save();
model.transitionTo('things');
只是要注意这似乎也发生在 RESTAdapter 上。记录已在服务器上成功创建,但在过渡期间模型仍会在 Ember 应用程序中被删除。