【发布时间】: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