【问题标题】:Ember component cannot use access controller property via "needs"Ember 组件无法通过“需要”使用访问控制器属性
【发布时间】:2014-12-31 15:39:28
【问题描述】:

我正在尝试从组件中更改控制器的属性,如下所示(JSBIN 示例http://jsbin.com/gevuhu):

App.CategoryManagerController = Ember.Controller.extend({
  selectedCategory: null,
});

App.BlogPostComponent = Ember.Component.extend({
    needs: ['categoryManager'],
    selectedCategory: Ember.computed.alias('controllers.categoryManager.selectedCategory'),
    actions:{
        selectedCategory: function (){
            this.set('selectedCategory',1);
        }
    }
});

但收到错误Property set failed: object in path "controllers.categoryManager" could not be found or was destroyed.

是不是我们不能在组件中使用“需要”?

【问题讨论】:

  • 组件没有needs 属性,只有控制器。您需要从组件的车把助手中传入组件中所需的任何数据
  • 我想从另一个控制器中的组件更新属性是什么?

标签: ember.js ember-controllers


【解决方案1】:

Ember 组件与包括控制器在内的周围环境完全隔离(请参阅here)。这就是坏消息。好消息是,如果您将 selectedCategory 传递给组件,它将成为 2-way bound,因此您的控制器将知道组件中对它的任何更改。

所以,你的控制器可能是这样的:

App.ApplicationController = Ember.ObjectController.extend({
    needs: ['categoryManager'],
    selectedCategory: Ember.computed.alias('controllers.categoryManager.selectedCategory'), 
    selectedCategoryChanged: function(){
      alert("NEW CATEGORY: " + this.get('selectedCategory'));
    }.observes('selectedCategory')
});

然后在你的application模板中,你可以说

{{ blog-post selectedCategory=selectedCategory }}

查看工作示例here

【讨论】:

    【解决方案2】:

    在 2.2 等更高版本中。我们将把它写成:

    App.ApplicationController = Ember.Controller.extend({
        categoryManager: Ember.inject.controller("categoryManager")
    });
    

    现在,categoryManager 将拥有名为 categoryManager 的控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2016-03-13
      • 2015-10-11
      相关资源
      最近更新 更多