我有以下 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 逻辑中的一个漏洞还是有意设计的?