1

次の 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'

ユーザーがアプリケーションに入力した URL に関係なく、ナビゲーション アウトレットを接続したいので、ルート ルートの connectOutlets を使用しています。

問題は、ルーターが作成されるとすぐに、ルートの connectOutlets が起動することです。これは、ルーターが runInjections を介して注入されたコントローラーを持つ前です。

これらのコンセントをリーフ ルートで接続するとすべてが機能しますが、それは私が求めているものではありません。

ルートの 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 ロジックの穴ですか、それとも設計によるものですか?

4

1 に答える 1

1

通常、ルート状態は特別なものであると考えているため、この状態には connectOutlets を使用しません。実際には、これはルート状態 (URL '/' に応答する) が「ホーム」状態にリダイレクトされ、その中に connectOutlets を配置することを意味します。

これの利点は、controllers-not-injected yet の問題に遭遇しないことですが、History API を使用していない場合、「デフォルト」の URL が yoursite.com/#/home のようになることも意味します。 yoursite.com/home にアクセスしてください。

どちらの場合も理想的ではありませんが、少なくとも、Ember.run.next を connectOutlets に押し込んでいるわけではありません。あなたはそうしないと思いますが、今から次の実行ループが起動するまでの間にコントローラーが注入されることを期待しています...そうである場合とそうでない場合があります...

于 2012-11-28T15:04:15.773 に答える