我正在实现创建新用户的视图。
App.UserNewRoute = Ember.Route.extend({
model : function(params) {
return this.store.createRecord('user');
}
});
在UserNewController上有一个方法,如果用户按下取消,则会触发该方法。
App.UserNewController = Ember.ObjectController.extend({
//... code
actions: {
//.. other actions
cancel: function(){
var model = this.get('model');
model.destroyRecord();
this.transitionToRoute('users');
}
}
});
我总是收到以下错误:
Uncaught Error: Attempted to handle event `willCommit` on <App.User:ember751:null> while in state root.deleted.saved.
我尝试过使用替代方案:
model.deleteRecord();
model.save();
我得到了同样的错误。
我做错了什么?
答案 0 :(得分:1)
该问题可能与model.destroyRecord()返回一个promise以及您在该promise之前完成转换这一事实有关。我一直在使用以下内容:
var model = this.get('model');
var _this = this;
// assuming you are working with a new model and not on say an edit page
// this will delete the new record and once the promise returns will transition routes
if (model.get('isNew')) {
model.destroyRecord().then(function() {
_this.transitionToRoute('route name');
}
}
因此只有在履行承诺后才会发生转变。我仍然是一个灰烬磨砂膏,但我认为它不会受伤。
答案 1 :(得分:0)
根据此https://github.com/emberjs/data/issues/1669,问题可能已在较新的Ember版本中修复。我正在使用Ember version 1.5.1
和Ember-Data version 1.0.0-beta.6
解决方法是进行dirty
检查。
var model = this.get('model');
model.deleteRecord();
if (model.get('isDirty')) {
model.save();
}
this.transitionToRoute('users');