2012-06-25 8 views
10

Ember.jsルータに条件付きリダイレクトを設定する方法はありますか?ルータの内部整合性を損なうことはありませんか?Emberjs:ルータの条件付きリダイレクト

+0

を呼び出してリダイレクトしたくない場合は、移行を中止することができればなぜあなたはもう少し説明することができます決めることができます'connectOutlets'とは別のルートに移行していますか? (私はまあまあのようなものですので、あなたがやろうとしていることを理解できないかもしれません) – MilkyWayJoe

+1

ちなみに、ルートは上書きできる 'redirect:'要素を持っています。ガイド。 – totowtwo

答えて

23

あなたは(今日のように)何ができるか、そのようなものです:あなたがenterにいる間、状態遷移が常に保留中ですので、あなたが遷移に持っているようにEmber.run.nextをお見逃しなく

root: Ember.Route.extend({ 
    index: Ember.Route.extend({ 
     enter: function(router) { 
      var logged = /* get from appropriated source... */; 
      Ember.run.next(function() { 
       if (logged) { 
        router.transitionTo('loggedIn'); 
       } else { 
        router.transitionTo('loggedOut'); 
       } 
      }); 
     } 
    }), 

    loggedIn: Ember.Route.extend({ 
     // ... 
    }), 

    loggedOut: Ember.Route.extend({ 
     // ... 
    }) 
}) 

その後。

あなたが何をしようとして、あなたは条件付きの遷移を探している可能性があり応じ

+4

'enter'の代わりに' connectOutlets'を実行すると 'Ember.run.next'は必要ありません。 –

+0

精度をお寄せいただきありがとうございます! :-) –

+0

あなたは 'connectOutlets'でそれを行う方法の例がありますか? – Qrilka

2

...オーために示したように我々はそれを使用しますが、あなたがする必要がどのような条件のためにそれを使用して想像できます。これはanother stackoverflow questionに記載されています。そのTLDRはthis fiddleです。

3

新しいルータは現在のルートに移行しながら、あなたは上の乗り条件ロジックを含めることができ

beforeModel 

フックを含んでいます。 beforeModelフックは

model 

フックが呼び出される前に呼び出され、それが

transition 

オブジェクトが渡されます。あなたは「あなたが

transitionToRoute() 

を使用して別のルートにリダイレクトしたいか、あなたが

transition.abort() 
関連する問題