テーブル ビューでレンダリングしたいモデルのコレクションがあります。各モデルはテーブル内の 1 つの行で表す必要があり、この行はテンプレートを使用して生成する必要があります。イベント ハンドラーをその行 (クリックなど) にアタッチできるはずです。イベントが発生すると、その行に関連付けられたモデルに関する特定の情報が警告されます。
これと同様のことを私が見た一般的な方法は、各行を独自のビューに分割し、親ビュー (この場合はテーブルとしましょう) で行ビューを使用して html を生成し、コードに含めることです。 . ただし、これがテンプレートでどのように機能するかわかりません。
この場合、RowView には dom 要素 (this.el
バックボーン用) への参照がないため、イベントを特に RowView にアタッチすることはできません。単純に文字列を返します。テンプレートを最大容量まで使用しながら、どうすれば目的を達成できますか?
問題は、特にイベント、テンプレート化、またはネストされたビューの使用に関するものではなく、Backbone を使用してこの種の出力を実現する正しい方法に関するものです。
サンプルコード(フィドルでも):
/** View representing a table */
var TableView = Backbone.View.extend({
tagName: 'table',
render: function() {
var rows = _.map(this.collection.models, function(p) {
return new RowView({model: p}).render();
});
$('body').html(this.$el.html(rows.join('')));
}
});
/** View representing a row of that table */
var RowView = Backbone.View.extend({
render: function() {
// imagine this is going through a template, but for now
// lets just return straight html.
return '<tr>' +
'<td>' + this.model.get('name') + '</td>' +
'<td>' + this.model.get('age') + '</td>' +
'</tr>';
}
});
var data = [
{'name': 'Oli', 'age': 25},
{'name': 'Sarah', 'age': 20}];
/** Collection of models to draw */
var peopleCollection = new Backbone.Collection(data);
var tableView = new TableView({collection: peopleCollection});
tableView.render();
ありがとうございました!