访问 Ember-CLI 嵌套控制器
Accessing Ember-CLI Nested Controllers
这是我的目录结构:
controllers/
---- restaurant/
----items.js
---- index.js
---- restaurant.js
我的路由器声明:
this.route("restaurants",{
path: "/restaurants"
});
this.resource("restaurant", {
path: "/restaurants/:restaurant_id"
}, function() {
this.resource("items", {
path: "/items"
});
});
我的项目控制器(位于 restaurants/items.js)以以下内容开头:
export default Ember.ObjectController.extend({
needs: ["restaurant"],
restaurant: Ember.computed.alias('controllers.restaurant.model')
然后执行在 hte 餐厅下添加项目的操作。
但是,我不断收到 hte 错误提示 "restaurant" 需要添加到 "needs":
ReferenceError: (generated items controller)#needs does not include restaurant
. To access the restaurant controller from (generated items controller), (generated items controller) should have a needs
property that is an array of the controllers it has access to
这是我的设置(Ember-CLI 0.1.2 与 Ember 1.7)- 因为我使用壁炉适配器与 firebase 一起工作,我认为它不支持升级Ember(根据我的尝试)。
DEBUG: -------------------------------
DEBUG: Ember : 1.7.0"
DEBUG: Ember Data : 1.0.0-beta.10"
DEBUG: Handlebars : 1.3.0"
DEBUG: jQuery : 1.11.2"
DEBUG: Fireplace : 0.2.9"
DEBUG: -------------------------------
我尝试了其他 Whosebug 答案(例如 How to communicate between controllers in Ember.js),但它们似乎没有帮助。
有人知道这里发生了什么吗?
我认为您的项目控制器不需要位于子文件夹 restaurant
中。将其提升一个级别,看看是否可以解决问题。
从 Ember-CLI v0.2.1 + Ember v1.10.0 开始(可能适用于早期版本;但我还没有尝试过),这就是您的操作方式:
export default Ember.ObjectController.extend({
needs: ["restaurant/items"],
...
要访问操作,您可以这样做:
actions: {
myAction: function(arg1, arg2) {
this.get('controllers.restaurant/item').send('someItemActionYouDefine', arg1, arg2);
}
}
这是我的目录结构:
controllers/
---- restaurant/
----items.js
---- index.js
---- restaurant.js
我的路由器声明:
this.route("restaurants",{
path: "/restaurants"
});
this.resource("restaurant", {
path: "/restaurants/:restaurant_id"
}, function() {
this.resource("items", {
path: "/items"
});
});
我的项目控制器(位于 restaurants/items.js)以以下内容开头:
export default Ember.ObjectController.extend({
needs: ["restaurant"],
restaurant: Ember.computed.alias('controllers.restaurant.model')
然后执行在 hte 餐厅下添加项目的操作。
但是,我不断收到 hte 错误提示 "restaurant" 需要添加到 "needs":
ReferenceError: (generated items controller)#needs does not include
restaurant
. To access the restaurant controller from (generated items controller), (generated items controller) should have aneeds
property that is an array of the controllers it has access to
这是我的设置(Ember-CLI 0.1.2 与 Ember 1.7)- 因为我使用壁炉适配器与 firebase 一起工作,我认为它不支持升级Ember(根据我的尝试)。
DEBUG: -------------------------------
DEBUG: Ember : 1.7.0"
DEBUG: Ember Data : 1.0.0-beta.10"
DEBUG: Handlebars : 1.3.0"
DEBUG: jQuery : 1.11.2"
DEBUG: Fireplace : 0.2.9"
DEBUG: -------------------------------
我尝试了其他 Whosebug 答案(例如 How to communicate between controllers in Ember.js),但它们似乎没有帮助。
有人知道这里发生了什么吗?
我认为您的项目控制器不需要位于子文件夹 restaurant
中。将其提升一个级别,看看是否可以解决问题。
从 Ember-CLI v0.2.1 + Ember v1.10.0 开始(可能适用于早期版本;但我还没有尝试过),这就是您的操作方式:
export default Ember.ObjectController.extend({
needs: ["restaurant/items"],
...
要访问操作,您可以这样做:
actions: {
myAction: function(arg1, arg2) {
this.get('controllers.restaurant/item').send('someItemActionYouDefine', arg1, arg2);
}
}