Emberjs - 在@each中改变的模型

时间:2013-03-03 08:03:53

标签: javascript ember.js

我有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> 1}} - 控制器本身和属性字符串。

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

更新

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

根据建议,我现在会检查itemController

2 个答案:

答案 0 :(得分:1)

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

虽然知道你的用例会很好:很可能有比手动创建观察者更好的方法。

答案 1 :(得分:0)

您可以直接在您只能访问this的模型上观察该属性。当您使用@each观察时,您不应该真正关心特定记录是否发生了变化,只是发生了变化。

使用itemController也是一种选择,但它可能是一种过度杀伤。