请注意以下Ember视图定义。如果我删除了didInsertElement
来电或注释了get('controller')
来电,则setupMultiselect
观察员永远不会被调用。这是一个功能还是一个bug?困惑...
Discourse.KbRelatedObjView = Discourse.View.extend({
...
didInsertElement: function() { var self = this;
// for some reason this needs to be here else the observer below never fires
self.get('controller');
},
setupMultiselect: function() { var self = this;
...
}.observes('controller.objPage')
});
答案 0 :(得分:2)
我不会说这是一个功能或错误,更像是一个怪癖。这是预期的行为。注意到here。
未经计算的未计算属性不会触发观察者
如果您从未获得计算属性,则即使其依赖键发生更改,其观察者也不会触发。您可以将值从一个未知值更改为另一个值。
这通常不会影响应用程序代码,因为几乎总是在获取计算属性的同时观察它们。例如,您获取计算属性的值,将其放入DOM(或使用D3绘制),然后观察它,以便在属性更改后更新DOM。
如果您需要观察计算属性但当前没有检索它,只需在init方法中获取它。