工作流程是:
ArrayController似乎在添加验证失败的记录。
App.CompaniesNewRoute = Ember.Route.extend({
model: function(){
var company = App.Company.createRecord();
this.wireObservers(company, this);
return company;
},
events: {
save: function(){
var controller = this.controllerFor(this.routeName);
controller.get('transaction').commit();
}
},
wireObservers: function(company, router) {
company.on('becameInvalid', function(record){
// do something to remove it from the arraycontroller
// record.rollback();
});
company.on('didCreate', function(){
router.transitionTo('companies.index')
});
})
})becameInvalid事件确实会被调用。执行record.rollback()会引发异常:
Uncaught Error: Attempted to handle event `becameClean` on <App.Company:ember612:null> while in state rootState.loaded.created.invalid. Called with undefined ember-data.js:3495
DS.StateManager.Ember.StateManager.extend.unhandledEvent ember-data.js:3495是否有办法防止ArrayController添加验证失败的记录。
发布于 2013-02-01 01:52:04
尝试在商店中回滚事务。
wireObservers: function(company, router) {
var _self = this;
company.on('becameInvalid', function(record){
// do something to remove it from the arraycontroller
_self.store.rollback();
});
company.on('didCreate', function(){
router.transitionTo('companies.index')
});
})您应该考虑为此目的创建一个特定的事务,而不是使用默认事务。若要在路由内创建新事务,可以执行以下操作
App.MyRoute = Ember.Route.extend({
transaction: this.store.transaction();
})然后创建记录并使用以下方法将其添加到事务中
var company = this.transaction.createRecord(App.Company);并最终提交或回滚事务。
this.transaction.commit();
this.transaction.rollback();发布于 2013-02-01 22:02:39
在您的示例中,我认为回滚()不是解决方案,因为事务已经提交;即使服务器验证失败,记录也已添加到ArrayController内容中。
我可以看到的解决方案是使用deleteRecord函数,如下所示:
wireObservers: function(company, router) {
company.on('becameInvalid', function(record){
record.deleteRecord();
});
company.on('didCreate', function(){
router.transitionTo('companies.index');
});})
我有个关于你工作流程的问题。当您收到验证错误并离开页面时,这意味着用户取消了记录创建。
https://stackoverflow.com/questions/14633564
复制相似问题