2012-02-29 7 views
1

ルーティングに関する質問があります。私のアプリがあるルートで初めて起動したときに、ビューを正しくインスタンス化してレンダリングする方法を理解することが難しいということです。例えば初期ルートにルーティングするときのビューの準備

ユーザが経路を介してアプリケーションにアクセスする場合/#のA/B/C

マイアプリサブセクションと異なるセクションから構成されています。これは、上記のルートが動作するためには、サブセクションBのビューをレンダリングして表示する前にセクションAのビューをレンダリングし、サブセクションCのビューをレンダリングして表示する必要があることを意味します。

事は、さまざまなルーティングハンドラで醜いコードの束で

a: function(){ 
    A.render(); 
} 
b: function(){ 
    A.render(); 
    B.render(); 
} 
c: function(){ 
    A.render(); 
    B.render(); 
    C.render(); 
} 

だから私は、私が問題に間違った道に近づいてることを考えています。

アプリが増えるにつれて他のルータを導入すると、これを維持することがさらに困難になると思います。 ルートのコールバックが呼び出される前にイベントがトリガされた場合の解決策があります。しかし、私はドキュメントでそのようなものを見つけることはできません。

私の質問は、これらの状況はどのように適切に処理されるのですか?私のソリューションは規模が変わらないからです。 a subrouteを訪れたときにいつも火を通す方法はありますか?

+0

運の良いはそれを行うための方法は、/、/に同じハンドラを追加することであろうと思いますか? –

答えて

1

私はこれを行うには良い方法は見つけられませんでしたが、私が行ったことを分かち合い、あなたの状況に当てはまるかもしれません。私がしたかったのは、ルートの一部に応答する別個のルータを持っていましたが、バックボーンはそのように動作しませんでした。バックボーンは、一致する最初のルートが見つかると停止します。私はそれがルートを定義するためのカスタム正規表現this-- 予告のようにルータを設定することです処理するために何をやったか

- うまくいけば、それはあなたの目は出血することはありません

initialize: 
{ 
    this.route(/([^\/]*)[\/]?([^\/]*)?[\/]?([^\/]*)?/, "renderViews", this.renderViews); 

}, 
renderViews: function(mainView, subView, subSubView) 
{ 
    //here you can do something clever--mainView, subView and subSubView may or may not 
    // have values but they are the names of the views. route of "a/b" will pass 
    // ["a", "b", undefined] as your arguments 
    if (mainView) 
     (new App.Views[mainView]()).render(); 
    if (subView) 
     (new App.Views[subView]()).render(); 
    if (subSubView) 
     (new App.Views[subSubView]()).render(); 

} 

私はこれがまさにあなたが望んでいるものではないことを認識していますが、プロジェクトではうまくいきました。 BとA /::B/C:

+0

ありがとう - これを試してみる=) 複雑なアプリケーションでは、このルートはかなり大きくなる可能性があります。 =(BBがより良いルーティング能力をサポートしていないことは残念です。 –

+0

それは複雑かもしれません。より良いルーティング機能が私を助けてくれたことに同意します。関数「a」)を使用して、残りの経路の探索を継続すべきことをBBに示す。 – timDunham

関連する問題