为什么在更改侦听器时不会触发我的计算属性?

时间:2013-12-21 05:28:49

标签: ember.js

我有一个简单的ArrayController,它带有一个filteredContent计算属性,可以让我切割出一个ember对象数组。我有一个间隔属性,当我改变时,我想重新计算计算属性。

然而,如下所示,当我“设置”间隔

时,我的filteredContent属性似乎没有触发
App.FilterController = Ember.ArrayController.extend({
    interval: 15,
    filterAvailable: function(event) {
        var selected = event.target.selectedIndex;
        var value = this.get('content')[selected].get('id');
        this.set('interval', value);
    },
    filteredContent: function() {
        var cleaned = this.get('content').toArray().filter(function(apt) {
            return apt.get('id') === null;
        });
        var sorted = cleaned.sort(function(a, b) {
            return Ember.compare(new Date(get(a, 'start')), new Date(get(b, 'start')));
        });
        return sorted;
    }.property("interval", "content.@each")
});

在我的模板中,我有一个带有简单changeBinding的select,它启动了“可用过滤器”方法

  {{view Ember.Select
  changeBinding="controller.filterAvailable"}}

1 个答案:

答案 0 :(得分:1)

我要去睡觉,但如果没有什么依赖于(又称观察)filteredContent那么它就不会重新计算。

将其添加到模板确实满足要求。

您可以检查this是否为控制器,而不是视图或其他内容,我不确定如何调用filterAvailable。

是的,这是我的怀疑,执行时filterAvailable的上下文是选择视图,你需要获取控制器并设置它。因此,目前您在选择视图上设置属性interval,而不是预期的属性。

filterAvailable: function(event) {
    var selected = event.target.selectedIndex;
    var value = this.get('content')[selected].get('id');
    // the controller backing the select view is your Filter Controller
    this.set('controller.interval', value);
},