web-dev-qa-db-ja.com

Backbone.js-トリガーを使用してイベントをトリガーし、データを渡す

MVCフレームワークとしてbackbone.jsを使用してタブメニューコンポーネントを作成しています。ユーザーがタブをクリックすると、コンポーネントがタブを切り替える(内部操作)が、コンポーネントのリスナーがイベントに関連付けられたアクションに応答するようにしたい。この背後にある考え方は、さまざまなクリックを特定のアクションに抽象化しているということです。たとえば、各タブのモデルは次の構造のハッシュです。

{
    label : <string>,
    actionCommand : "save",
    tabClass : <string>
}

トリガーされるイベントは「アクション」と呼ばれるため、リスナーは「アクション」に応答しますが、特定のコマンドを転送します。例えば:

this.trigger("action", {actionCommand: "save"});

次に、リスナーは次のようにイベントを処理します。

handleAction : function(event) {
  if (event.actionCommand == "save") {
    ...do something...
  }

}

これは可能ですか?ドキュメントからこれを収集することはできませんでした。あなたが提供できるあらゆる洞察を事前に感謝します。

14
Brendan Delumpa

はい、それはバックボーンで可能です。

イベントモジュールを使用して、オブジェクトにカスタムの名前付きイベントをバインドおよびトリガーする機能を許可できます。

あなたの場合、メニューモジュールオブジェクトにイベントモジュールを追加する必要があります。このオブジェクトがバックボーンモデルの場合は、すでにイベントモジュールがあります。そうでない場合は、次のコードで追加できます

_.extend(MenuComponent, Backbone.Events);

次に、リスナーはこのようにサブスクライブできます

MenuComponent.bind("action", this.handleAction, this);

そして、あなたはすでに述べたようにイベントをトリガーすることができます

this.trigger("action", {actionCommand: "save"});
30
Paul