BackboneJS - 设置父/继承视图的'el'

时间:2013-01-08 09:26:01

标签: backbone.js

所以我试图在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'要渲染的元素?

1 个答案:

答案 0 :(得分:0)

除非我误解了你在这之后所做的事情,否则在构建你的子视图时你仍然可以传入el,即使它继承自表视图:

new app.Views.quotesList({ el: $('#foo') })

只要您将其传递给初始化程序,它就会在您调用render()或其他任何使用它的时间设置,即使父项(表)定义了render()图。