我有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
。
答案 0 :(得分:1)
您可以使用reduceComputed或arrayComputed在当前的余烬中实现此目的。
虽然知道你的用例会很好:很可能有比手动创建观察者更好的方法。
答案 1 :(得分:0)
您可以直接在您只能访问this
的模型上观察该属性。当您使用@each
观察时,您不应该真正关心特定记录是否发生了变化,只是发生了变化。
使用itemController
也是一种选择,但它可能是一种过度杀伤。