Ember组件无法通过“需求”使用访问控制器属性

时间:2014-12-31 15:39:28

标签: ember.js ember-controllers

我正在尝试从组件中更改控制器的属性,如下所示(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.

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

2 个答案:

答案 0 :(得分:4)

Ember组件与周围环境完全隔离,包括控制器(参见here)。这是坏消息。好消息是,如果您将selectedCategory传递给组件,它将成为双向绑定,因此控制器将知道组件中对组件的任何更改。

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

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

答案 1 :(得分:0)

在2.2之类的版本中。我们将其写成:

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

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