我在制作Marionette递归的正确方法时遇到了一些麻烦。我已经看到了其他一些问题的答案,但我已经在http://jsfiddle.net/vZY2v/中将这个问题分解成了一个非常简单的例子。我知道秘诀在于复合材料的使用,但我没有找到正确的方法去做。Backbone Marionette递归列表
欲产生N级嵌入列表,例如:
<ul>
<li>Bob</li>
<ul>
<li>Jim</li>
<li>Jane</li>
</ul>
</ul>
的HTML看起来像:
<body>
<div id='myContainer'></div>
<script type='text/template' id='my-item'>
<%= name %>
</script>
</body>
下面的代码:
var jsonData = [{
name: 'Bob',
children: [{
name: 'Jim'
}, {
name: 'Jane'
}]
}, {
name: 'Sally',
children: [{
name: 'Sue',
children: [{
name: 'John'
}, {
name: 'Lisa'
}]
}]
}];
var Item = Backbone.Model.extend({});
var ItemCollection = Backbone.Collection.extend({
model: Item
});
var i = new Item();
var Manager = new Marionette.Application();
Manager.addRegions({
mainRegion: "#myContainer"
});
var RecursiveView = Marionette.CompositeView.extend({
tagName: "li",
template: '#my-item',
initialize: function() {
if (this.model.get('children')) {
this.collection = new ItemCollection(this.model.get('children'));
}
}
});
var MotherView = Marionette.CollectionView.extend({
tagName: "ul",
itemView: RecursiveView
});
var myColl = new ItemCollection(jsonData);
var x = new MotherView({
collection: myColl
});
Manager.mainRegion.show(x);
所需的输出是如下所示:
- 鲍勃
- 吉姆
- 简
- 萨利
- 苏
- 约翰
- 丽莎
- 苏