【发布时间】:2013-03-03 08:03:53
【问题描述】:
我有一个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。
【问题讨论】:
-
afaik,没有常见的桶来汇集脏记录。虽然这似乎是一件非常有用的事情。
-
@MehulKar 存储桶也很好,但我正在寻找的是有关其更改触发观察者的模型的通知。如果可以通过函数参数完成,那将是最好的..
-
这不是你想在模型上观察的东西,而不是控制器?
-
看起来像你应该观察或存储在模型上的东西,或者更可能是一个 itemClassController...你想用观察来完成什么?
标签: javascript ember.js