Javascript 我怎么知道模型上更新了哪个对象。@每个

Javascript 我怎么知道模型上更新了哪个对象。@每个,javascript,ember.js,Javascript,Ember.js,我正在尝试更改对象列表中的对象属性,并希望在对象被更改后立即获取该对象 我的方法是通过模型观察该列表上的属性更改。@each.property\u 1 export default Ember.Controller.extend({ onModelProperty1Change: function(){ // How can i get that particular object after one of it // property was changed insid

我正在尝试更改对象列表中的对象属性,并希望在对象被更改后立即获取该对象

我的方法是通过
模型观察该列表上的属性更改。@each.property\u 1

export default Ember.Controller.extend({

  onModelProperty1Change: function(){
    // How can i get that particular object after one of it 
    // property was changed inside here?
    //
    // do some database action to the object...

  }.observes('model.@each.property'),

});

我不知道这是不是一个正确的方法。或者我应该改为在元素上更改事件?无论采用哪种方式,我都需要知道,可以将该对象放在
观察者
帮助者的内部。

如果不添加附加状态,您就不可能在观察者触发并随后更新时“区分”该状态。我不推荐这种方法

相反,更改对象的函数应该调用更新代码。这可以通过操作+服务轻松实现。让我们假设触发更新的任何东西都会发送要更新的模型索引和新值(我在这里只是演示,因为您没有包括对象如何更改)


现在,在具有双向绑定的旧ember版本中,拦截这些更改(当它们是绑定表单字段更改的结果时)并不容易,而且您必须像当前代码那样依赖观察者。转换为单向绑定方法,其中表单元素发出动作,而您仅在动作处理程序中更新模型,可以解决此问题

如果不添加附加状态,您将无法尝试在观察者触发并随后更新时“区分”其他状态。我不推荐这种方法

相反,更改对象的函数应该调用更新代码。这可以通过操作+服务轻松实现。让我们假设触发更新的任何东西都会发送要更新的模型索引和新值(我在这里只是演示,因为您没有包括对象如何更改)


现在,在具有双向绑定的旧ember版本中,拦截这些更改(当它们是绑定表单字段更改的结果时)并不容易,而且您必须像当前代码那样依赖观察者。转换为单向绑定方法,其中表单元素发出动作,而您仅在动作处理程序中更新模型,可以解决此问题

在一个项目列表中,模型属性在更新输入控件上的数据时发生更改,假设我们要编辑特定行中的属性
name
。这是一种常见的模式,但对这种情况有效,因为
@each
的设计目的不是检测哪一行被更改,而只是观察其中一个项目是否被更新。@Roel给我看一个演示该问题的余烬旋转。我相信我的建议将通过放弃双向绑定(假设您不是Ember 1.x)来帮助您协调属性的更新和编辑。您的输入字段会发出,比如说
onChange
,此时您可以设置名称并从单个操作处理程序触发更新,而不是让双向绑定的输入在更新输入控件上的数据时为您更新项目列表中的字段模型属性更改,假设我们要编辑特定行中的属性
name
。这是一种常见的模式,但对这种情况有效,因为
@each
的设计目的不是检测哪一行被更改,而只是观察其中一个项目是否被更新。@Roel给我看一个演示该问题的余烬旋转。我相信我的建议将通过放弃双向绑定(假设您不是Ember 1.x)来帮助您协调属性的更新和编辑。您的输入字段会发出,比如说
onChange
,此时您可以设置名称并从单个操作处理程序触发更新,而不是让双向绑定的输入为您更新字段
actions: {
  updateModelAtIndex(index, prop){
    let modelToUpdate = this.get('model')[index];
    modelToUpdate.set('property', prop);

    let service = this.get('someInjectedService');
    service.save(modelToUpdate);
  }
}