Ember-1.0.0和带有Fixture Adapter的Ember Data 1.0 Beta 2.
我想要完成的是,在我致电save
之后,如果已经解决了退回的承诺,我想转换到路线。
在this jsbin中,您可以点击“新建”,输入某些内容,然后点击“创建”。转换发生,因此save
的承诺得到解决,但由于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
,然后点击Home
。该模型仍然存在。如果用户再次单击New
,则会创建新模型。现在我们有两个新模型。如果用户再次点击Home
然后再点击New
,现在我们有三个模型。如果输入了有效输入并且用户最终点击了Create
,则会有一个新的已保存模型和两个尚未浮动的新未保存模型。我认为甚至没有办法再访问这些浮动模型了。
最后,如果我只是调用这两个方法,那么模型将调用save
然后转换而不删除模型,但无论是否解析了承诺,它都会这样做。
model.save();
model.transitionTo('things');
请注意,RESTAdapter似乎也会发生这种情况。该记录已在服务器上成功创建,但在转换过程中仍会在Ember应用程序中删除该模型。
答案 0 :(得分:3)
我现在更清楚为什么要删除“停用”。我总是了解到最好不要使用停用(在xxx / edit / 1和xxx / edit / 2之间切换时不会触发)。
您可以更好地使用willTransition。这是我使用的代码:
App.AuthorsNewRoute = Ember.Route.extend({
model: function() {
return this.store.createRecord('author');
},
actions: {
willTransition: function(transition) {
var model = this.get('currentModel');
if (model && model.get('isDirty')) {
if (confirm("You have unsaved changes. Click OK to stay on the current page. Click cancel to discard these changes and move to the requested page.")) {
//Stay on same page and continue editing
transition.abort();
} else {
//Delete created record
var author = this.get('currentModel');
author.deleteRecord();
}
}
}
}
});
答案 1 :(得分:0)
查看您的代码。为什么在停用时实现了“deleterecord”?
在每次路线更改时都会调用取消激活,并且您已在取消激活中实施删除,因此删除记录是正常的...
if(!model.get('isSaving'))表示如果您未处于isSaving状态(仅在非常短的时间内发生),则删除记录...
我认为您可以删除完整的停用块。然后它会起作用。
马克