我使用Ember Data创建了非常简单的Ember应用程序。有一个表单,用户创建实体并提交。它位于BandsNewView
(由Ember自动创建),由BandsNewController
控制:
App.BandsNewController = Ember.Controller.extend({
cancel: function() {
this.transitionTo('bands');
},
save: function() {
App.Band.createRecord(this);
this.get('store').commit();
this.set('name');
this.set('description');
this.transitionTo('bands');
}
});
我想知道在保存新的Band实体后是否有更简单的解决方案来“清理”(即清空)表格?我可以说this.set()
这样会清空所有字段吗?或者我的方法本质上是错误的,我应该完全不同吗?
答案 0 :(得分:2)
我一直享受的模式是在进入和退出路线本身时创建和销毁对象。
App.BandsNewRoute = Ember.Route.extend({
model: function(params) {
return App.Band.createRecord({});
},
save: function() {
this.get('currentModel.store').commit();
return this.transitionTo('bands');
},
exit: function() {
var model = this.get('currentModel');
if (model.get("isNew") && !model.get("isSaving")) {
return model.get('transaction').rollback();
}
}
});
正如您所看到的,它使退出函数稍微复杂一些,但对于每个对象创建路径都是完全相同的,因此您可以将其分解出来。现在你的模板可以直接绑定到模型的属性,模型将在保存时保存,或者在退出时回滚(这将清除表单)
如果您计划可能更改其他数据模型而不保存它们,或者有未保存的模型,那么安全地清除模型的方法是将其放入自己的事务中。我只倾向于使用这个对象而不是我当前流程的主要焦点。
App.BandsNewRoute = Ember.Route.extend({
model: function(params) {
var transaction = this.get('store').transaction();
return transaction.createRecord(App.Band, {})
}
});
其他一切都可以保持不变。