从视图中观察控制器属性仅在从didInsertElement调用get('controller')时才有效

时间:2014-03-05 16:23:50

标签: ember.js

请注意以下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')

});

1 个答案:

答案 0 :(得分:2)

我不会说这是一个功能或错误,更像是一个怪癖。这是预期的行为。注意到here

  

未经计算的未计算属性不会触发观察者

     

如果您从未获得计算属性,则即使其依赖键发生更改,其观察者也不会触发。您可以将值从一个未知值更改为另一个值。

     

这通常不会影响应用程序代码,因为几乎总是在获取计算属性的同时观察它们。例如,您获取计算属性的值,将其放入DOM(或使用D3绘制),然后观察它,以便在属性更改后更新DOM。

     

如果您需要观察计算属性但当前没有检索它,只需在init方法中获取它。