2

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

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

4

2 回答 2

4

Ember 组件与包括控制器在内的周围环境完全隔离(参见此处)。这就是坏消息。好消息是,如果您传入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 }}

在此处查看一个工作示例

于 2014-12-31T15:58:14.590 回答
0

在像 2.2 这样的更高版本中。我们将把它写成:

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

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

于 2016-02-04T05:57:57.300 回答