1

私は、データ駆動型プログラミング パラダイムでは、ルーターとビューを互いに分離する必要があり、両者がサブスクライブするモデルの変更を介してのみ相互に通信する必要があると考えています。

ただし、オンラインのさまざまなチュートリアルはすべて、これを異なる方法で行っています。ルーターの初期化メソッド内でビューをインスタンス化し、ルーターがビューにアクセスする方法を提供するコードを見てきました。ビューがルーターのルート イベントの変更をリッスンできるように、ルーターをビューに渡すコードも確認しました。

関心の分離を壊すので、どちらのアプローチも正しいとは思いません。私は Backbone を初めて使用するので、経験豊富で知識のある人に確認してもらえますか?

4

2 に答える 2

0

ルーターを使用してビューをインスタンス化することに問題はありません。実際に私が使用している方法です。ルーターは新しい URL を検出し、使用されていないビューを切り離し、要求されたものをインスタンス化します。

ルーター参照をビューに渡すのは、ビューとサブビューの間で参照を移動し続けるために多大な労力を費やすことは言うまでもなく、見苦しい場合があります。

しかし一方で、ビューはナビゲーションを変更するためにルーターに信号を送信できる必要があるため、簡単な方法でルーターをアプリ内のすべての要素に対してグローバルに表示できるようにApp.router.navigate()し、任意のビューから呼び出すことができます。参照を明示的に渡すことを忘れないでください。どのバックボーン アプリケーションでも許可される Router インスタンスは 1 つだけなので、この決定は守られます。

于 2012-08-22T22:33:25.087 に答える
0

一部のプロジェクトでは、ルーティング イベントをビューに渡すグローバル イベント ディスパッチャを使用しました。

window.Dispatcher = _.extend({}, Backbone.Events);

'all'ルーターでは、イベントをキャプチャするイベントにバインドできroute:*ます。

initialize: function() {
    this.bind('all', this.onRoute);
},
onRoute: function(route) {
      Dispatcher.trigger(route);
}

ビューでは、Dispatcher イベントにバインドし、ルートの変更に対応できます。

initialize: function() {
    Dispatcher.on('route:index', this.onIndex, this)
}

これは、ルートが変わるとモデルが変わるのと似ていますが、管理が簡単で、ビューにルーターを渡す必要もないと思います。これが正しい方法かどうかはわかりませんが、Backbone を使用するとさまざまな方法で作業を行うことができます。

于 2012-08-23T08:41:22.757 に答える