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