0

基本的に私がやりたいことは、HTML テーブルの行ごとに 1 つのバックボーン ビューを用意することです。これは、テーブルをレンダリングするときに簡単に実現できます。各 tr の backbone.view をインスタンス化し、それがビューの「el」になります。 .

ただし、これにより、各 tr に eventlistener が含まれることになり、あまり効率的ではありません。同じことを達成する方法、つまり、各行ビューの「el」をtrにする方法はありますが、すべてのイベントはテーブル要素から委任され、イベントリスナーは1つだけ存在しますか?

おそらく、テーブルの親ビューを持ち、何らかの方法ですべてのイベントを委任するか、これをうまく行う方法が本当にわかりません、ありがとう。

4

1 に答える 1

3

これに対する通常のアプローチはTableView、複数RowViewの s を持つことです。TableView は に関連付けられ、必要なCollection数の をインスタンス化してRowView、この Collection を反復処理します。

また、TableView は Collection の変更をリッスンし、Collection が変更された場合は RowView インスタンスを作成および削除します。

RowView はModel、コレクション内の各 の変更をリッスンします。また、各モデルに関連付けられたアクティブな DOM 要素に対するユーザーの操作をリッスンします。

これについては何の問題もありません。そして、最も直感的で保守しやすく、エレガントな構造だと思います。

TableView が一度にすべての行のイベントをリッスンする方が問題ではないと本当に思う場合は、これを試してください。

var TableView = Backbone.View.extend({
  events: {
    "click tr a.remove", "remove"
  },

  remove: function( event ){
    console.log( "row-id", $(event.target).attr( "data-row-id" ) );
  }
});

row例のように、特別な属性によってTableViewでそれぞれを識別できることを確認しdata-row-idてください..しかし、コレクションに移動し、具体的なモデルを検索して、直接持っているRowViewでこのイベントを直接消費するときに行動する必要がありますモデルへのアクセスとすべてがより自然に機能します。

実際には、パフォーマンスが向上するとは思いません。アンダーフードの jQuery が同じ数のイベント リスナーを作成すると思います。

于 2012-07-28T17:52:26.473 に答える