2

右側にサイドバーがあるアプリケーションに取り組んでいます。それはコレクションを表示します。コレクションの各モデルにはselect動作があります。

ページの上部中央には、「情報バー」のように機能する独立したバックボーン ビューが 1 つあります。このビューは、サイドバーでビューの 1 つを選択すると、その情報を更新する必要があります。

どうすればいいですか?サイドバーの各ビューには、モデル引数を使用して「選択された」イベントが必要だと思います。私の質問は、Backbone.js の情報バー ビューでその変更をどのように聞くことができるかということです。

4

1 に答える 1

5

これは、イベント アグリゲーター パターンによって適切に提供されるもののように思えます。Derick Bailey は、この件に関して非常に優れた記事を投稿しました。ここで読むことができます。

イベント アグリゲーター パターン

Backbone.View を拡張して、すべてのビューでイベント アグリゲーター オブジェクトをこのように使用できるようにしました。

Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);

基本的に、モデル ビューが選択されると、view.eventAggregator がカスタム イベントをトリガーします。

sidebarView.eventAggregator.trigger('selected', this.model);

またはこの種の何か。バックボーン イベントを使用すると、トリガー関数を介してパラメーターをイベント リスナーに渡すことができます。上記の例では、特定のイベントでモデルを渡しました。

メイン ビューでは、このイベントをリッスンします。

mainView.eventAggregator.on('selected', myFunction, this);

myFunction: function(model) {
    // Some code to execute - model is available through param
}

かなり使えるパターンです。mainView を閉じるときに、イベントのバインドを解除することを忘れないでください。:-)

于 2012-08-13T00:03:21.890 に答える