我正在构建一个节点树,其中所有节点都可以有子节点,而那些子节点可以有孙子等等。
我只需使用一个视图就可以将它的模型中列出的任何子视图呈现出来。我现在的情况如下:
define(["backbone", "text!templates/node-tree/node.html"], function(Backbone, NodeTmpl) {
var NodeView;
return NodeView = Backbone.View.extend({
className: "node",
template: _.template(NodeTmpl),
initialize: function() {
this.render();
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
if (this.model.get("children")) {
this.renderChildren();
}
},
renderChildren: function() {
var container = this.el.querySelector(".child-nodes");
for (var i = 0; i < this.model.get("children").length; i++) {
var child = this.model.get("children")[i];
var view = new NodeView({model: child});
container.appendChild(view.el);
}
return this;
}
});
});这样行吗?我的意思是,我看到了它的工作,但我是否设置了我自己的一些讨厌的惊喜的道路上?另一个选项是拥有两个相同的视图类(NodeA、NodeB),并让它们分别用于呈现子视图。然而,这显然不是很干燥,如果我不需要走那条路,我宁愿不走。
发布于 2014-10-24 13:17:11
这样做是很好的。这与Marionette的CompositeView非常相似。木偶的复合的默认行为(如果没有定义itemView/childView属性)是将复合视图本身用作子视图。
https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.compositeview.md
我自己也用过这个结构。我有一个分层数据对象,需要将它们呈现为与容器视图相同的子视图(通过一些css调整)。
https://stackoverflow.com/questions/26544481
复制相似问题