UnderscoreJS嵌套模板:我该怎么做?

时间:2013-11-01 06:38:31

标签: backbone.js underscore.js nested

我本身并没有面临技术挑战,因为我有一些工作代码。我只是不确定这是正确的方法,所以在继续走这条道路之前,我想先由一些专家来管理......

我正在使用此帖子中的'render'功能:https://stackoverflow.com/a/10136935/1480182

然后我有两个Backbone视图:

DetailLineView = Backbone.View.extend({
    initialize: function (options) {
        this.options = options;
        this.render();
    },
    render: function () {
        var variables = { detailLine: this.options.detailLine };
        this.$el.html(render("DetailLine", variables));
    }
});

CustomerView = Backbone.View.extend({
    initialize: function (options) {
        this.options = options;
        this.render();
    },
    render: function () {
        var dl = "";
        _.each(this.options.customer.attributes.detailLines, function (line) {
            var v = { detailLine: line };
            dl += render("DetailLine", v);
        });

        var variables = { customer: this.options.customer.attributes, detailLinesHtml: dl };
        this.$el.html(render("Customer", variables));
    }
});

当然还有相应的模板。

现在上面的代码可以工作,但据我所知,我实际上并没有使用DetailLineView。

我觉得有一种(更多?)更优雅的方式来做这件事,但我没看到......有人可以帮帮忙吗?

编辑:更好的(?)解决方案:

我将CustomerView更改为:

CustomerView = Backbone.View.extend({
    initialize: function (options) {
        this.options = options;
    },
    render: function () {
        var variables = { customer: this.options.customer.attributes };

        this.$el.html(renderTemplate("Customer", variables));
        var dlv = new DetailLineView({ 
                          el: $('.detailLinesContainer', this.$el), 
                          detailLine: this.options.customer.attributes.detailLines[0] 
                      });
        dlv.render();
    }
});

我更喜欢它,现在我正在使用我的DetailLineView ......

1 个答案:

答案 0 :(得分:0)

我用我的解决方案更新了我的OP,imho比原来的更好。