我怎么知道哪个对象已在model。@ each EmberJS上更新

时间:2019-02-07 13:19:17

标签: javascript ember.js

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

我的方法是通过model.@each.property_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'),

});

我想知道这是否是正确的方法。还是应该在元素上进行更改事件?无论哪种方式,我都需要知道可以在observes帮助器中获取该对象。

1 个答案:

答案 0 :(得分:0)

如果不添加其他状态,当观察者触发并随后进行更新时,您可以“差异”,就无法进行尝试。我不推荐这种方法

相反,更改对象的函数应随后调用更新代码。这可以通过动作+服务轻松完成。假设触发更新的任何因素都会发送要更新的模型索引和新值(我只是在这里演示,因为您没有包括对象的更改方式)

actions: {
  updateModelAtIndex(index, prop){
    let modelToUpdate = this.get('model')[index];
    modelToUpdate.set('property', prop);

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

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