javascript - 当对象更改时 ArrayController 被重新过滤

标签 javascript ember.js

我在保持数组与模板完全同步方面遇到了一些问题,ArrayController 正在密切关注被推送、删除和更新的对象。然而,ArrayController 正在过滤结果,当其中一个对象发生更改并且它的新属性可能最终将其排除在过滤器之外时,它实际上并没有被删除。

请参阅下面的代码,为了简化内容,内容设置为对象数组,但在我的应用程序中它实际上是 Ember.A([Ember.Object, Ember.Object])等等,底层数组是可变的,它随着它的对象一直在变化。

App.TabController = Ember.ArrayController.extend({
    content: [
        {id: 1, key: 'unique'},
        {id: 2, key: 'unique'},
        {id: 3, key: 'non-unique'},
    ],

    filteredContent: function() {
        var content = this.get('content');

        return this.filter(function(item, idx, en) {
            return (item.key == 'unique');
        });
    }.observes('content.length').property('content'),
});

上面的代码对于将第三个对象保留在模板之外绝对没有问题,因为它的键与unique的值不匹配。然而,假设 id 等于 3 的对象被更新,并且它是对 unique 的关键更改,它不会被推送到模板中 - 我希望它是这样,我已经尝试了一些解决方案,但没有效果。

我还要注意,如果任何新对象带有正确的 key ,那么它们将被插入到模板中,如果它们被删除,它们也会被删除,并且模板中显示的对象中的任何值也会被更新当对象发生变化时,我知道 ArrayController 正在完成它的工作,它只是不重新过滤结果。

在不强制完全重新渲染或其他一些魔法的情况下,这是否可能?

最佳答案

我会使用filterBy计算属性宏,有点像这样:

App.TabController = Ember.ArrayController.extend({
  filteredContent: Ember.computed.filterBy('content', 'key', 'unique')
});

关于javascript - 当对象更改时 ArrayController 被重新过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21194816/

相关文章:

javascript - 操作对象数组中的对象

javascript - Ember linkedin api 身份验证 token 问题

javascript - 在 ember/handlebars 中使用 value 和 valueBinding 有什么区别?

testing - Ember.js 的测试数据生成(如 factory_girl 或 machinist)

ember.js - 有趣的 Ember,CoffeeScript 优先级

javascript - 导航菜单未在浏览器中呈现

javascript - jQuery 输入数字微调器

javascript - 如何重命名数组中对象的键

Javascript 访问对象内的对象方法

javascript - Ember 应用路由器。 "App not defined"