1

我有一个包含 3 条路线的应用程序:

"/"
"/one"
"/two"

我想在它们中的任何一个加载之前连接类似headerfooter的插座。applicationView

由于 ember 只能导航到叶节点,因此我不能嵌套/onetwo/,仍然能够导航到/

这意味着我必须分别connectOutlets为所有 3 条路由重复代码以连接headerfooter

我不能在路由器connectOutlets的属性上使用,因为它还没有准备好。rootapplicationController

applicationView在执行任何路由之前,我的应用程序首次加载时如何连接插座?

4

1 回答 1

1

您可以在非叶子路由中使用 connectOutlets,当路由器将这些路由遍历到叶子路由时,它将运行这些 connectOutlets。要解决您的其他问题(路由到“/”),最好在任何非叶路由中都有一个索引路由(“/”)。

编辑:由于我们已经确认 applicationController 在根路由中未定义,简单地将所有内容放在根路由的子路由中似乎可以解决该问题,并且不会改变路由器的功能。

App.Router = Ember.Router.extend({
  root: Ember.Route.extend({
    route: '/',
    app: Ember.Route.extend({
      route: '/',
      connectOutlets: function(router) {
        router.get("applicationController").connectOutlet({
          viewClass: App.HeaderView,
          outletName: 'header'
        });
      },
      index: Ember.Route.extend({
        route: '/',
        connectOutlets: function(router) {
          router.get("applicationController").connectOutlet(...);
        }
      }),
      one: Ember.Route.extend({
        route: '/one',
        connectOutlets: function(router) {
          // if you have a OneController and OneView:
          router.get("applicationController").connectOutlet('one');
        }
      }),
      ...
    })
  })
});
于 2012-10-03T19:06:33.480 回答