自定义Ember视图中的观察者并不总是在控制器属性更改时触发

时间:2014-03-13 10:12:19

标签: ember.js

我想根据多个标准过滤一个对象数组。也可以进行分类。到目前为止我的设置:http://emberjs.jsbin.com/OxIDiVU/284/edit

排序和过滤工作。但是,当切换过滤器时,我无法可靠地更新我的过滤器复选框视图。只要封闭控制器中的filterChanged数组发生更改,就应触发函数filterStop

部分代码摘录:

App.FilterCheckbox = Ember.Checkbox.extend({
    'data-count': null
    isActive: false
    init: () ->
        # filterChanged only triggered if we set a breakpoint in the init function :/?
        this._super()
    filterChanged: (() ->
        active = this.get('controller.filterStop')[this.get('data-count')] == true
        this.set('isActive', active)
    ).observes('controller.filterStop.@each')
});

在我的控制器中,我有一个更改filterStop

的操作
filterByStops: (count) ->
    old_value = this.get('filterStop')[count]
    this.get('filterStop').replace(count, 1, [!old_value])

现在奇怪的是,filterChanged观察者功能并不总是被触发。如果我在FilterCheckbox.init函数中设置断点并在断点被击中后继续执行,则观察者始终触发(如预期的那样)。如果我删除断点并重新加载页面,则观察者不再触发。

为什么这种行为取决于断点的任何想法?如何设置它,以便我的复选框可以观察其封闭控制器的属性?

更新: 我只是注意到调试器断点技巧仅适用于带有chrome dev工具的chrome。在使用Firebug的Firefox(for OSX)中,技巧/欺骗无效。

1 个答案:

答案 0 :(得分:0)

Okey所以我发现我只需要明确地告诉视图要使用哪个控制器实例。更新的jsbin:http://emberjs.jsbin.com/OxIDiVU/287/edit

我的观看代码:

{{view App.FilterCheckbox data-count="2" controller=controller}}