2

我有一个场景,我在页面中列出产品并允许用户仅在模式窗口中编辑产品的属性。

当用户单击产品并开始编辑产品的属性时,更改会立即传播到产品列表页面中的产品以及直接或间接绑定到正在更改的属性的页面的任何部分。不是期望的行为。仅当用户确认更改(即单击保存按钮、事务提交和模式窗口关闭)时才应传播更改

transaction: APP.store.transaction(),

renderTemplate:function(controller, record) {
    this.transaction.add(record);
    // append the modal view
    App.ModalView.create().append();        
},

onSaveClick: function(record) {
    this.transaction.commit();
    this.transitionTo('products');
},  

理想情况下,我需要指示 Ember 停止传播对产品的任何更改,直到提交事务。我尝试使用 beginPropertyChanges 和 endPropertyChanges 来推迟以这种方式通知任何相关观察者:

renderTemplate:function(controller, record) {        
    this.transaction.add(record);
    record.beginPropertyChanges();
    // append the modal view
    App.ModelView().create().append();        
},

onSaveClick: function(record) {
    record.endPropertyChanges();
    this.transaction.commit();
    this.transitionTo('products');
},  

这可以防止更改传播到列表,但是事务没有提交,并且当模式窗口关闭时项目仍然是脏的。

我很确定我没有正确使用它。只要项目未提交,如其 currentState 所反映,我需要一种方法来使更改远离商店

使用项目状态 isDirty 无助于解决此问题,因为当使用它时,项目会从列表中完全删除,这是不可接受的。

  {{#each item in controller}}
   {{#unless item.isDirty}}
     {{item.name}}
   {{/unless}}
4

1 回答 1

0

它与您正在编辑的对象完全相同,因为您正在输入的文本字段绑定到属性,并且主列表中的表示也绑定到它们都被更新的相同属性。

Ember-data 负责将对象持久化到后端,而不是在应用程序的状态之间。

你应该看看这个。它解释了如何制作一个惰性文本字段对象,该对象不会立即使用绑定更新对象,而是仅在单击保存按钮后才更新。

于 2013-01-18T08:53:24.317 回答