2011-11-15 9 views
0

私はテーブルを含むビューを持っています。Backbone.jsのサブビューでイベントをトリガーする

var newsIndexView = Backbone.View.extend({ 
    ... 
}); 

モデル内の各行は、モデルに関連付けられた別のビューです。

​​

ユーザーは行を選択できます。 1行以上選択すると、削除ボタンが表示されます。ボタン(.delete_many)を選択すると、選択した各newsItemViewの削除イベントをトリガーします。行が選択されたときにわかるように、イベントハンドラを追加し、選択されていないときに削除します。私はこれを行うより良い方法があるかどうか疑問に思っていましたか?

答えて

2

クリックハンドラーを一度インストールするためにテーブルを管理するビューでdelegateEventsを使用できませんでしたか?後でボタンが追加されたとしても(ボタンが後で削除されても周囲にとどまる)、起動する必要があります。

var newsIndexView = Backbone.View.extend({ 
events: { 
    "click .deleteMany" : "deleteMany" 
}, 
... 

deleteMany関数は、どの行が選択されているか把握し、ループ内でそれらを削除します。ボタンはテーブル全体に属し(個々の行ではなく)、これはより自然なようです。また、「確かですか?」確認ダイアログ(各行ではなく1回だけポップアップしたい)とサーバーバックエンドの一括削除機能(各行に1つずつではなく1つのリクエスト)を使用するのも簡単です)。

+0

私はindexViewからそれを行う場合、私はDOM内の各モデルのIDを格納すると思います。私はあなたが解決策だと思っていますが、モデルIDをDOMに格納せずに行うことは可能ですか(例:data-id = "1")? – LDK

+0

ビューとDOM TRに1対1で(同じ順序で)対応するモデルのコレクションはありませんか?そうでない場合は、モデルのIDをDOMにアタッチします。 – Thilo

関連する問題