我正在尝试从组件中更改控制器的属性,如下所示(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.
是否我们不能在组件中使用“需求”?
答案 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的控制器。