【问题标题】:ember 2.0: use same controller in several routesember 2.0:在多个路由中使用相同的控制器
【发布时间】:2015-10-14 12:57:08
【问题描述】:

ember 2.0 中如何指定在路由中使用哪个控制器? 默认是每条路由都有自己的控制器,如果我没有控制器代码,那么在运行时会生成一个默认的空控制器。

我想指定几个路由共享同一个控制器(和模型)。我看到在 ember 的 documentation to an older version 中,可以在路由定义中使用“controllerName”属性指定控制器,但是对于最新的 ember 版本,该部分文档已被删除。当我测试 controllerName 属性时它不起作用。

【问题讨论】:

  • 也许您可以使用继承和/或混合在多个控制器之间共享相同的逻辑
  • 你能分享更多关于你试图在路由之间共享的逻辑的细节吗?
  • 我解决了自己的问题。请在下面回答。

标签: ember.js ember-controllers


【解决方案1】:

这不是您正在寻找的,但您可以扩展您想在其他路线上使用的控制器。

import FooIndexController from 'ember-app/foo/index/controller';
export default FooIndexController.extend({});

如果您有很多代码应该由多个控制器共享,您也可以考虑使用 mixin。它可以是一个更清洁的解决方案。

import Ember from 'ember';
import BaseController from 'ember-app/mixins/base-controller';
export default Ember.Controller.extend(BaseController, {
    // Code specific to _this_ controller lives here
});

【讨论】:

  • 谢谢。这就说得通了。不是我现在想要的,但这些技巧也可能有用。
【解决方案2】:

我想通了。事实证明controllerName 确实有效。

我刚刚这样做了:

// route/home/books/book/details
import Ember from 'ember';
export default Ember.Route.extend({
    controllerName: "home/books/book/index",
});

然后bookbook/details 共享控制器。他们已经共享模型,因为details 路由是book 的子路由。所以效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多