访问Ember-CLI嵌套控制器

时间:2015-01-05 04:18:16

标签: javascript ember.js nested ember-cli 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 restaurant下添加项目。

然而,我一直在回答错误,说“餐馆”需要添加到“需求”中:

  

ReferenceError :(生成的项目控制器)#needs不包含restaurant。要从(生成的项目控制器)访问餐厅控制器,(生成的项目控制器)应该具有needs属性,该属性是它可以访问的控制器的数组

这是我的设置(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: -------------------------------

我已经尝试了其他Stackoverflow答案(例如How to communicate between controllers in Ember.js),但它们似乎没有帮助。

有谁知道这里发生了什么?

2 个答案:

答案 0 :(得分:0)

我不认为您的项目控制器需要位于子文件夹restaurant中。将其向上移动一级,看看是否能解决问题。

答案 1 :(得分:0)

从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);
    }
}