Ember - 提交后清除表单

问题描述:

我使用Ember Data创建了非常简单的Ember应用程序。有一种形式是用户创建实体并提交的。这是一个在BandsNewView(由灰烬自动创建),由BandsNewController控制:Ember - 提交后清除表单

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'); 
    } 
}); 

不知是否有simplier解决“清理”(即空)保存新的乐队后的实体形式?我可以说this.set()这样的东西,它会清空所有的字段吗?或者我的方法本质上是错误的,我应该完全不同吗?

我一直在享受的模式是创建和销毁路线本身进入和退出时的对象。

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, {}) 
    } 
}); 

其他一切都可以保持不变。

+0

这也可以回滚可能存在的其他更改。您可能需要将记录放入单独的交易中。请参阅我的编辑.. – 2013-02-10 13:14:57

+0

Shimon,您进行交易的方式有点冗长,更新时间较短。 – 2013-02-10 14:40:38

+0

@AndreMalan值得更新,使用'停用'并删除交易代码。我认为最好是评论,而不是完全为你重写。 – jonathanKingston 2015-06-01 17:30:29