有没有人使用Backbone.js使用垂直表列作为 View “el”取得任何成功?由于表是基于行的,因此使用表行作为与 View 关联的DOM容器很简单。但是,我需要实现的布局是垂直的,因此表列将是我设计的“el”,但是表列没有类似的容器元素,因为表布局是水平的。
到目前为止,我还无法成功为表列创建 subview ,这意味着我将数据绑定(bind)到DOM以便检索和操作表列。我的设计变得更加复杂,这使我重新评估了原始方法,希望有更好的方法可以通过 subview 管理这种情况。有任何想法吗?
最佳答案
您可以利用以下事实
this.$el
可以是您想要的任何节点考虑到这一点,您可以一次性渲染表格(请参见BackboneJS Rendering Problems,它更快,并且在您的情况下可能更容易),然后将 subview 应用于与模型关联的表格单元。我使用了一个用于选择的类名,但是每行第n个元素上的选择器应该起作用。
模板
<table>
<thead>
<tr>
<th></th>
<% _(children).each(function(model) { %>
<th><%= model.id %></th>
<% }); %>
</tr>
</thead>
<tbody>
<% _(properties).each(function(prop) { %>
<tr>
<td><%= prop %></td>
<% _(children).each(function(model) { %>
<td class="<%= model.cid %>"><% print(model[prop]); %></td>
<% }); %>
</tr>
<% }); %>
</tbody>
</table>
View
ListView = Backbone.View.extend({
initialize: function(opts) {
this.options = opts;
},
render: function () {
var data, html, $table, template = this.options.template;
data = this.collection.map(function (model) {
return _.extend(model.toJSON(), {
cid: model.cid
});
});
html = this.options.template({
children: data,
properties: ['id', 'name']
});
$table = $(html);
this.collection.each(function (model, ix) {
var $el = $table.find("." + model.cid),
subview = new ItemView({
el: $el,
model: model
});
});
this.$el.empty();
this.$el.append($table);
return this;
}
});
正如您可以在此演示http://jsfiddle.net/nikoshr/psasT/12/中 checkin 一样,每列均由专用 View 处理。