如何从Ember JS中的子路径访问父控制器?

时间:2016-11-03 06:40:02

标签: javascript ruby-on-rails ember.js

我有一条名为 list 的主要路线。

//items/list/route.js
setupController(controller, items) { 
    let vegItems = Ember.A([]);
    let nonVegItems = Ember.A([]);
    items.forEach((item) => {
        if (item.get('category') === "veg") {
            vegItems.pushObject(item);
        }

        if (item.get('category') === "non_veg") {
            nonVegItems.pushObject(item);
        }
    })

    controller.set('vegItems', vegItems)
    controller.set('nonVegItems', nonVegItems);
}

现在在列表路线中,我有名为 veg 非veg 的路线。即list / veg和list / non-veg。如何从list / route.js访问父路由的控制器变量,即 vegItems nonVegItems 到子路由,以加载list / veg / template中的数据。 hbs和list / non-veg / template.hbs?

1 个答案:

答案 0 :(得分:6)

this.controllerFor('list') - 返回当前路由的控制器,或路由层次结构中的父(或任何祖先)路由。您可以通过get方法获取所有属性。

this.modelFor('list') - 返回路由层次结构中父(或任何祖先)路由的已解析模型。

list:Ember.inject.controller() - 创建一个懒惰地查找容器中另一个控制器的属性。您只能在控制器中注入它。

参考:

https://emberjs.com/api/ember/2.14/classes/Ember.Route/methods/controllerFor?anchor=controllerFor

https://emberjs.com/api/ember/2.14/classes/Ember.Route/methods/controllerFor?anchor=modelFor

https://www.emberjs.com/api/ember/2.14/namespaces/Ember.inject/methods/controller?anchor=controller