Ember模型和组件,获取组件以检测模型中的更改

时间:2014-04-25 01:13:40

标签: javascript ember.js controller components models

我很困惑并且在修复模型中检测到变化的控制器和组件方面。根据{{​​3}} -

  

“默认情况下,模型钩子返回的值将被分配给关联控制器的model属性。例如,如果App.PostsRou​​te从其模型钩子返回一个对象,则该对象将被设置为模型App.PostsController的属性。“

因此,当模型在路径中更改时,或者通过外部函数异步时控制器是否应该更新?

App.IndexRoute = Ember.Route.extend({
    model: function(){
    App.set('localStore', this.get('store'));  
    App.localStore.createRecord('stats', {'name': 'cde'});
   return this.store.find("stats");
  }
});

App.IndexController  = Ember.Controller.extend({
    modelObs: function() {
        // Never triggered!
    console.log("CONTROLLER: model updated!");
}.property('model')
});

// Component with the controller's model property passed to it as localModel
// in the template
App.NewCompComponent = Ember.Component.extend({
    localModel: null,
    modelObs: function() {
    console.log("COMPONENT: Model updated!");
    }.property('localModel')

这是一个说明问题的Jsbin - Ember Official Documentation

有什么我可能做错了吗?如何让组件检测来自控制器的传递模型的变化,类似地如何让控制器检测路径模型的变化?也许我错过了一两件事 - 指点值得赞赏!感谢

1 个答案:

答案 0 :(得分:1)

除非使用计算属性,否则不会评估计算属性。他们被懒惰地评估了。

使用这些属性中的任何一个都会导致对它们进行评估,并且会发生日志。

http://jsbin.com/suheroya/1/edit

此外,重要的是要知道模型本身没有改变,因此不会反复调用计算属性。模型上的属性正在发生变化,如果您想要反复调用计算属性,则需要观察这些属性。