1

そのため、バックボーン ルーティングの設計で少しジレンマに陥っており、この問題を解決するために他の人々が何を考えているか、または試みているかを確認しようとしています。

基本的な問題は、複数のビューと各ビュー内のネストされたビューを持つアプリケーションを作成し、これらのビューとネストされたビューの状態を制御するために 1 つのバックボーン ルーターを使用しないようにしようとしていることです。

問題の例は次のとおりです。

Backbone.Router.extend({ routes: 
'view1' : ..., 'view2Nested': ..., 
'View2NestedNested' ...});

ビューのレイアウト:

  • ビュー1
    • View1ネストされた
  • ビュー2
    • View2Nested
    • View2NestedNested

この構成では、ルーターは View2NestedNested についてアクション情報を送信する必要があります。これは、メイン ルーターがビューへの参照を保持するか、view2 について認識し、view2Nested への参照を取得し、そのビューに view2NestedNested を要求する必要があることを意味する可能性があります。 .

4

1 に答える 1

0

私のアプローチは、その親への参照を使用してビューを作成することです。

したがって、基本的にビューは次のようになります。

var ViewAA = Backbone.View.extend({
    initialize: function(options) {
         this.parent = options.parent
    },

    render: function() {
         this.parent.router.navigate("viewA/viewAA");
    }
});

var ViewA = Backbone.View.extend({
    initialize: function(options) {
         this.router = options.router
    },

    render: function() {
       this.nestedView = new ViewAA({ parent: this });
    }
});

var router = new Router();

var viewA = new ViewA({ router: router });

より複雑なアプリケーションで使用している 2 番目のアプローチは、1 つのグローバル変数を使用することです...次のようになります。

var ViewAA = Backbone.View.extend({
    initialize: function(options) {

    },

    render: function() {
         app.router.navigate("viewA/viewAA");
    }
});

app = {
    router: new Router(),
    classes: {
        ViewA: Backbone.View.extend({ ... }),
        ViewAA: Backbone.View.extend({ ... })
    },
}

app.viewA = new app.classes.ViewA();
app.viewAA = new app.classes.ViewAA();

ヒント: RequireJS と AMD のアプローチを使用することは常に優れているため、それも試してみることをお勧めします。

于 2013-03-28T21:17:32.490 に答える