6

次のシナリオを理解しようとしています:

2 つのビューがあるとしましょう。1 つはアイテムを表示するためのもので、もう 1 つは購入するためのものです。問題は、購入ビューが表示用のサブビューであることです。

ルーティングのために私は持っています:

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トリガーされると、メイン ビューが表示されなくなります。これを処理するための最良の解決策は何ですか?

4

2 に答える 2

1

あなたが今抱えている問題は、BuyView 内の ViewItem 内のもののいくつかを表示したくないということだと思いますか? その場合、BuyView と ViewItem の共通点を別のビューにモジュール化し、両方のルートで初期化する必要があります。

これは私のアプリのコード例です

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

ご覧のとおり、サイドバーは多くのビューで共有できるので、モジュール化しました。再利用でき、競合が発生しないようにしました。

于 2013-01-22T14:47:06.120 に答える
0

メイン ビューの存在を確認し、存在しない場合は作成/開くことができます。

私は通常、アプリの起動時にアプリの主要なビューを作成します (ただし、開きません)。次に、開く/閉じるための何らかのビュー マネージャーを作成します。小規模なプロジェクトの場合、ビューをviewsアプリ オブジェクトのプロパティにアタッチするだけで、views.mainView、views.anotherView などとしてアクセスできるように、すべて 1 か所にまとめられます。

また、Backbone.View を 2 つのメソッドで拡張します。openこれcloseは、ビューを DOM に追加/削除するだけでなく、ビューにisOpenフラグを設定します。

これにより、必要なビューが既に開いているかどうかを確認し、開いていない場合は次のように開くことができます。

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

オプションの追加はclearViews、おそらく にパラメーターとして渡されたビューの名前を除いて、開いているすべてのビューをクリアすると呼ばれるメソッドをアプリに作成することclearViewsです。そのため、一部のルートで消去したくないナビゲーション バー ビューがある場合は、呼び出すだけで、app.clearViews('topNav')views.topNav を除くすべてのビューが閉じられます。

このすべてのコードについては、この要点を確認してください: https://gist.github.com/4597606

于 2013-01-22T20:07:58.107 に答える