【问题标题】:Know which item fires the event when observing @each观察@each 时知道哪个项目触发了事件
【发布时间】:2013-08-31 16:51:08
【问题描述】:

我正在观察这样的 Ember Data RecordArray:

myArray: function() {
  return MyRecord.find();
}.property(),

isDirtyChanged: function() {
  // Do something
}.observes('array.@each.isDirty');

我想对触发事件的特定记录执行一些操作。例如,如果记录 2 被修改:

MyRecord.find(2).set('my_property', 'some_value');

isDirtyChanged 将被调用并对记录做一些事情。如何获取对调用观察者的记录的引用,而不仅仅是整个数组?

【问题讨论】:

  • 这不是你要问的,但是this question 有一些关于使用addArrayObserver 的信息可能会有所帮助。

标签: javascript ember.js ember-data


【解决方案1】:

据我所知,没有办法说。文档也没有提到如何做到这一点。请参阅 herehere

它确实提到了这一点:

注意,每次添加或替换元素都会调用@each.property 观察者,并且不会使用特定的枚举项调用它。

通常,如果您将objkeyname 参数添加到观察者函数并调用obj.get(keyname),您将获得您正在观看的对象。但是由于这里的键名是array.@each.isDirty,所以不起作用。

isDirtyChanged: function(obj, keyname) {
  obj is the targen here the object wacthing the array
  keyname is 'array.@each.isDirty'
  // Do something
}.observes('array.@each.isDirty');

我很想被证明是错误的!

这是fiddle 尝试一些东西。

【讨论】:

  • obj 在这种情况下是目标,即观察对象。我已经通读了代码,似乎不可能让特定对象调用观察者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多