2012-04-16 52 views
1

我刚开始使用ember.js。我的应用程序中有两个模型。一个保存数据,另一个保存用户编辑的数据。我使用单向绑定来绑定它们。模型中的重新绑定属性,emberjs

App.ViewModel = Ember.Object.create({ 
    title:'title', 
    text:'text', 
)}; 

App.EditModel = Ember.Object.create({ 
    titleBinding: Ember.Binding.oneWay('App.ViewModel.title'), 
    textBinding: Ember.Binding.oneWay('App.ViewModel.text'), 
)}; 

我让用户编辑EditModel模型中的数据。但是,如果用户放弃更改,我希望能够将值设置回编辑前的状态,即。到ViewModel中的值。

有没有办法重新绑定这些属性?或者在ViewModel中手动提升属性的更改事件,以便EditModel得到更新?或者我的问题有其他解决方法吗?

回答

3

你可以创建一个自定义的Mixin它处理复位的模型,看到http://jsfiddle.net/pangratz666/CjB4S/

App.Editable = Ember.Mixin.create({ 
    startEditing: function() { 
     var propertyNames = this.get('propertyNames'); 
     var props = this.getProperties.apply(this, propertyNames); 
     this.set('origProps', props); 
    }, 
    reset: function() { 
     var props = this.get('origProps'); 
     Ember.setProperties(this, props); 
    } 
}); 


App.myModel = Ember.Object.create(App.Editable, { 
    propertyNames: ['title', 'text'], 
    title: 'le title', 
    text: 'le text' 
}); 

后来在视图中,您只需调用startEditing当你想利用当前值和reset的快照当你想重置到前一个值的快照。

+0

看起来不错!当使用ember-data模型时,我们甚至可以通过观察模型的状态来想象这种自动化。 – 2012-04-16 12:14:30

+0

我想补充一点,模型中的propertyNames数组的规范在生成干净的对象以发送到服务器时对我来说是分开使用的。很好的接触 – joevallender 2012-04-20 08:19:40