我本身并没有面临技术挑战,因为我有一些工作代码。我只是不确定这是正确的方法,所以我想在我继续走这条路之前由一些专家运行......
我正在使用这篇文章中的“渲染”功能:https ://stackoverflow.com/a/10136935/1480182
然后我有两个主干视图:
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...