【问题标题】:Emberjs - model that changed in @eachEmberjs - 在 @each 中更改的模型
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    使用itemController 也是一种选择,但可能有点过头了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2018-05-04
      • 1970-01-01
      • 2013-11-16
      • 2023-03-11
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多