2013-01-22 12 views
6

私はシナリオ以下を把握しようとしている:表示する項目に1つ、それらを購入するため1:BACKBONE.JS:ネストされたビューのためのルーティング

は、私は2つのビューを持っていると言うことができます。キャッチすることは、購買ビューは表示するためのサブビューであるということです。

var MyRouter = Backbone.Router.extend({ 
    routes: { 
    'item/:id': 'viewRoute', 
    'item/:id/buy': 'buyRoute' 
    } 
}); 

var router = new MyRouter; 

router.on("route:viewRoute", function() { 
    // initialize main view 
    App.mainview = new ViewItemView(); 

}); 

router.on("route:buyRoute", function() { 
    // initialize sub view 
    App.subview = new BuyItemView(); 
}); 

今、ユーザーがページを更新し、buyRouteがトリガされますが、今はメインビューがない場合:私は持っているルーティングのための

。これを処理する最良のソリューションは何でしょうか?

答えて

0

私は、あなたが今購入しているViewItemの中にいくつかのものを表示したくないという問題があると思いますか?そうであれば、BuyViewとViewItemが共通に持つビューを別のビューにモジュール化し、それらのルートの両方で初期化する必要があります。それは多くのビュー間で共有することができますので、あなたが見ることができるように

ここ

は私のアプリケーションの1

https://github.com/QuynhNguyen/Team-Collaboration/blob/master/app/scripts/routes/app-router.coffee

からのコード例ですが、私はサイドバーをモジュール化。私はそれを再利用することができ、矛盾を起こさないようにしました。

0

メインビューが存在するかどうかをチェックし、メインビューがまだ存在しない場合は作成/開くことができます。

私は通常、アプリケーションの起動時に私のアプリケーションの主要なビューを作成しますが、開いたり閉じたりするビューマネージャを作成します。小規模なプロジェクトの場合は、自分のアプリケーションオブジェクトのviewsプロパティに添付して、view.mainView、views.anotherViewなどのように1つの場所にアクセスできるようにします。

また、Backbone.Viewを拡張します2つの方法:opencloseは、DOMにビューを追加/削除するだけでなく、ビューにisOpenフラグも設定します。これにより

、あなたがいないならば、そのように、それを開いて、必要なビューが既に開いているかどうかを確認することができます:

if (!app.views.mainView.isOpen) { 
    // 
} 

をオプションの追加は、あなたのアプリのメソッドを作成することですclearViewsと呼ばれますおそらく、開いているビューをすべてクリアします。おそらく、パラメータとしてclearViewsに渡されたビューの名前は例外です。したがって、いくつかのルートでクリアしたくないnavbarビューを持っている場合は、app.clearViews('topNav')と呼び出すことができ、views.topNavを除くすべてのビューは閉じられます。

チェックアウト、このすべてのコードについては、この要旨:https://gist.github.com/4597606

+0

のCoffeeScriptで上記のコード、あなたが好きなら:https://gist.github.com/4597528 – georgedyer

関連する問題