【问题标题】:Ember observer fires on array controller when it shouldn'tEmber 观察者在不应该在阵列控制器上触发
【发布时间】:2014-10-30 16:31:22
【问题描述】:

更新

这是我的问题所在:http://emberjs.jsbin.com/ruwet/8/edit?html,js,console,output4


我在数组控制器上有一个简单的过滤属性:

import Ember from 'ember';

export default Ember.ArrayController.extend({

  activeEncodes: function() {
    return this.filterBy('model', 'isActive');
  }.property('model.@each.isActive');

});

我已连接到 websocket 并正在使用

更新我的商店中的编码
store.store.push('encode', data);

即使它只是更新我的数据 (progress) 上的某个属性,activeEncodes 也会被重新计算。这导致我的模板出现一些视觉卡顿。

如果我使用model.@each.id,它不会重新计算,但任何其他属性似乎都会触发 CP 重新计算(即使该属性没有改变)。

知道为什么会这样吗?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    当您推送它时,会导致整个模型失效。然后这被认为是一个新模型,它会触发任何观察该模型上任何东西的观察者(因为它认为它是一个新模型)。它也与Ember data model reload causes item in {{each}} to be removed/inserted back - losing current state 相关。

    id 可能是一个特例,我相信它超出了模型基础属性的范围(与您没有在模型上定义 id 的原因相同)。不过我只是猜测。

    【讨论】:

    • 真是太糟糕了。是否有另一种方法可以更新不会使整个事情失效的模型?
    • 我很困惑,因为 RESTadapater 也不使用 push 吗?
    猜你喜欢
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多