【问题标题】:How to access the parent controller from the child routes in Ember JS?如何从 Ember JS 中的子路由访问父控制器?
【发布时间】:2016-11-03 06:40:01
【问题描述】:

我有一个名为 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);
}

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

【问题讨论】:

  • 为什么这个setupController 甚至是必要的?
  • 好吧@locks 我实际上想创建我需要在该路由中访问的变量。所以我认为设置控制器变量是一种方式。
  • 嗯,我明白了。通过model() 钩子发送它们通常不太容易出错。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多