【问题标题】:Ember.js connectOutlets runs on root the moment Router is createdEmber.js connectOutlets 在创建路由器的那一刻在 root 上运行
【发布时间】:2012-11-15 23:50:39
【问题描述】:

我有以下 ember 路由器定义:

WZ.Router = Em.Router.extend
  enableLogging: true
  location: 'hash'
  showHome: Ember.Route.transitionTo 'root.index'
  root: Em.Route.extend
    initialState: 'index'
    connectOutlets: (router, event) ->
      unless router.get 'initialized'
        router.get('applicationController').connectOutlet 'nav', 'navbar'
        router.get('homeController').connectOutlet 'bottombar', 'bottombar'
        router.set 'initialized', true

    index: Em.Route.extend
      route: '/'
      connectOutlets: (router, event) ->
        router.get('applicationController').connectOutlet 'home'

我正在使用根路由的 connectOutlets,因为无论用户进入应用程序的哪个 url,我都希望连接导航出口。

问题在于,一旦创建了路由器,根 connectOutlets 就会触发,这是在路由器通过 runInjections 注入控制器之前。

如果我在叶子路由中连接这些插座,一切正常,但这不是我所追求的。

如果我无法使用 root connectOutlets,我如何才能最好地确保无论用户在哪个 url 或路由上进入应用程序,导航插座都已连接?

我们是否也应该禁止在叶路由上覆盖 connectOutlets,因为如果没有控制器等连接它就相当无用?

编辑:我通过使用 Ember.run.next 解决了这个问题:

WZ.Router = Em.Router.extend
  enableLogging: true
  location: 'hash'
  showHome: Ember.Route.transitionTo 'root.index'
  root: Em.Route.extend
    connectOutlets: (router, event) ->
      Ember.run.next @, ->
        unless router.get 'initialized'
          router.get('applicationController').connectOutlet 'nav', 'navbar'
          router.get('homeController').connectOutlet 'bottombar', 'bottombar'
          router.set 'initialized', true
    index: Em.Route.extend
      route: '/'

但这似乎仍然不太理想。这是 Em 逻辑中的一个漏洞还是有意设计的?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我一般认为根状态是特殊的,所以我不使用connectOutlets这个状态。在实践中,这意味着根状态(响应 URL '/')重定向到“家”状态,我将在其中放置您的 connectOutlets。

    这样做的好处是您不会遇到控制器未注入的问题,但这也意味着如果不使用历史记录,您的“默认” URL 会变成类似 yoursite.com/#/home API 和 yoursite.com/home,如果你是的话。

    在这两种情况下都不是很理想,但至少你没有将 Ember.run.next 硬塞到你的 connectOutlets 中,这似乎是一种糟糕的形式,可能会带来一系列其他问题。我想你不会,但你现在期望你的控制器会在现在和下一个运行循环触发之间被注入......可能是这样,也可能不是......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多