У меня есть набор моделей, которые я хочу отобразить в виде таблицы. Каждая модель должна быть представлена одной строкой в таблице, и эта строка должна быть сгенерирована с использованием шаблона. Я должен уметь прикреплять обработчики событий к этой строке (например, щелчок), чтобы при событии оповещать о какой-то конкретной информации о модели, связанной с этой строкой.
Обычный способ, которым я видел подобные вещи, заключается в том, чтобы разбивать каждую строку на собственный вид и иметь родительский вид (скажем, таблицу в этом случае), используя представление строки для генерации html для включения в вашем коде. Однако я не могу понять, как это работает с шаблонами.
В этом случае я не могу привязывать события непосредственно к RowView, поскольку он не имеет ссылки на элемент dom (this.el
для магистрали), он просто возвращает строку. Как я могу достичь того, что хочу, при использовании шаблона до максимальной емкости?
Вопрос не в частности о событиях, шаблонах или использовании вложенных представлений, а о правильном способе использования Backbone для достижения такого вида вывода.
Пример кода (также в fiddle):
/** 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();
Спасибо!