5

我有一个ArrayController观察每个模型的特定属性的变化。我.observes('content.@each.someprop')为此目的使用:

App.ListController = Em.ArrayController.extend({
    content: [],

    myObserver: function () {
        //check changed property
        //do stuff if changed to some specific value
    }.observes('content.@each.someprop')
});

到目前为止一切顺利 - 当任何模型的属性发生变化时,观察者就会触发。但是,当它触发时,我不知道哪个模型发生了变化——我必须遍历模型并将该属性与存储在其他地方的旧值进行比较才能弄清楚,这是非常笨拙和低效的。我试图检查arguments观察者收到的,但它们也没有用:console.log(arguments)从观察者内部给出以下内容:[Class, "content.@each.someprop"],并console.log(arguments[0].toString())给出<App.ListController:ember366>- 控制器本身和属性字符串。

所以我的问题是:有没有办法在观察数组的@each属性时知道哪个模型发生了变化?

更新

当观察者触发时,我想检查被监视的属性是否已更改为某个特定值,如果是,则执行一些操作。

正如建议的那样,我会检查itemController现在。

4

2 回答 2

1

您可以使用reduceComputedarrayComputed在当前 ember 中实现此目的。

不过,最好了解您的用例:很可能有比手动创建观察者更好的方法。

于 2013-10-23T18:42:26.523 回答
0

您可以直接在您可以访问的模型上观察该属性this。当您与您一起观察时,@each您不应该真正关心特定记录是否发生了变化,而只是某些事情发生了变化。

使用 anitemController也是一种选择,但这可能是一种矫枉过正。

于 2013-03-16T09:39:33.623 回答