【问题标题】:Ember Model and Component, getting components to detect changes in modelsEmber 模型和组件,获取组件以检测模型的变化
【发布时间】:2014-06-10 13:03:58
【问题描述】:

对于检测模型变化的控制器和组件,我感到困惑并正在修复中。根据Ember Official Documentation——

"默认情况下,从你的模型钩子返回的值将被分配给关联控制器的模型属性。例如,如果你的 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 - http://jsbin.com/tavis/3/edit

有什么我可能做错了吗?如何让组件检测到来自控制器的传递模型的变化,以及如何让控制器检测到路由模型的变化?也许我错过了一两件事——感谢指点!谢谢

【问题讨论】:

    标签: javascript ember.js controller components models


    【解决方案1】:

    除非使用计算属性,否则不会对其进行评估。它们被懒惰地评估。

    使用这些属性中的任何一个都会导致它们被评估并且您的日志将会出现。

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

    此外,重要的是要知道模型本身不会发生变化,这样计算属性就不会被一遍又一遍地调用。模型上的属性正在发生变化,如果您希望反复调用计算属性,则需要观察这些属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多