所以我试图在Backbone中抽象我的<table>
工作,所以我创建了一个'table view'来扩展我的'基本视图'。因此,当我需要一个新表时,我可以扩展'表视图'并希望将'表视图'指向我希望它呈现的DOM元素,即。像这样:
app.Views.quotesList = app.Views.table.extend({
template: '#tmpl-table',
initialize: function(){
this.collection = new Backbone.Collection([
{name: "Tim", age: 5},
{name: "Ben", age: 26},
{name: "Rob", age: 55}
]);
},
render: function() {
var that = this;
var template = Handlebars.compile( $(this.template).html() );
$(this.el).html(template({id: 'quotes'}));
this.table = this.$('#table-quotes');
this.thead = this.table.find('thead tr');
this.tbody = this.table.find('tbody');
var template = Handlebars.compile( $('#table-heading').html() );
that.thead.append(template(that.collection.first().toJSON()));
var template = Handlebars.compile( $('#table-row').html() );
that.collection.each(function(model){
that.tbody.append(template(model.toJSON()));
});
return this;
},
});
我想将大部分通用代码移到表格视图中:
app.Views.table = app.Views.base.extend({
initialize: function(){
}
});
那么我如何从'quotesList视图'告诉'table view'要渲染的元素?
答案 0 :(得分:0)
除非我误解了你在这之后所做的事情,否则在构建你的子视图时你仍然可以传入el
,即使它继承自表视图:
new app.Views.quotesList({ el: $('#foo') })
只要您将其传递给初始化程序,它就会在您调用render()
或其他任何使用它的时间设置,即使父项(表)定义了render()
图。