我是ember.js的新手,我正在做一些体验。我最近尝试删除记录时遇到了一些问题。这是我的编辑路线(我称之为删除)
App.PostsEditRoute = Ember.Route.extend({
model: function(params){
return App.Post.find(params.id);
},
exit: function() {
this._super();
tx = this.get('currentModel.transaction');
if(tx)
tx.rollback();
},
setupController: function(controller, model){
controller.set('content', model);
},
events: {
save: function(post){
post.one('didUpdate', this, function(){
this.transitionTo('posts.show', post);
});
post.get('transaction').commit();
},
cancel: function(){
this.transitionTo('posts.show', post);
},
destroyPost: function(context) {
var post = context.get('content');
post.deleteRecord();
post.get('store').commit();
this.transitionTo('posts.index');
}
}
});
所以我有一个链接,通过它我触发destroyPost。记录已成功删除,我开始转换到索引路径,但发生错误......
未捕获错误:在状态rootState.deleted.inFlight中尝试处理事件rollback
。用未定义的
在此之后,加载索引页面的模型停止,我得到一个空页面。我可以提供所需的任何其他代码。这是索引路线。
App.PostsIndexRoute = Em.Route.extend({
model: function(){
return App.Post.find();
},
setupController: function(controller, model){
controller.set('content', model);
}
});
我应该注意这两个路由都是自己正确加载的。只有在过渡时我才会失败。
答案 0 :(得分:4)
您需要像在保存方法中使用didDelete
一样绑定到didUpdate
。
destroyPost: function(context) {
var post = context.get('content');
post.one('didDelete', this, function () {
this.transitionTo('posts.index');
});
post.deleteRecord();
post.get('transaction').commit();
}
此外,您的代码似乎有些不一致:在save方法中,您提交了一个单独的事务,而在destroyPost
中您提交了整个商店。