【发布时间】:2015-01-08 02:21:06
【问题描述】:
我正在尝试使用 Marionette CompositeView 呈现列表。我不确定为什么呈现的列表中只有一个显示单词result 的项目。我期待第一个项目显示Level 1。
这是我当前代码的一个小提琴:http://jsfiddle.net/16L1hen4/
这是我的 JS、模板和数据:
JavaScript:
var App = new Backbone.Marionette.Application();
App.addRegions({
mainRegion: '#main'
});
var TreeModel = Backbone.Model.extend({
});
var TreeCollection = Backbone.Collection.extend({
model: TreeModel,
url: 'https://api.mongolab.com/api/1/databases/backbone-tree/collections/tree?apiKey=somekey'
});
var TreeView = Backbone.Marionette.CompositeView.extend({
initialize: function() {
console.log(this.collection);
},
tagName: 'ul',
template: _.template( $('#tree-template').html() )
});
var treeCollection = new TreeCollection();
treeCollection.fetch().done(function () {
var treeView = new TreeView({collection: treeCollection});
App.mainRegion.show(treeView);
});
模板:
<div id="main"></div>
<script type="text/template" id="tree-template">
<li><%- name %></li>
</script>
JSON 数据:
{
"_id": {
"$oid": "54adab80e4b0aa674b256836"
},
"name": "Level 1",
"children": [
{
"name": "Child 1 - Level 2",
"children": [
{
"name": "Jon - Level 3"
},
{
"name": "Mary - Level 3"
}
]
},
{
"name": "Child 2 - Level 2",
"children": [
{
"name": "Bill - Level 3"
}
]
}
]
}
【问题讨论】:
-
Compositeview 需要一组 Backbone 模型来渲染,而不是单个模型。为了嵌套模型,您还可以在复合视图中使用集合视图。
-
@KimGysen 谢谢。我编辑了问题和代码以使用
Backbone.Collection而不是Backbone.Model。我仍然知道为什么第一项显示单词result。 -
这是一个小改动,和实际问题没有太大关系,但是你可以直接用
template: "#tree-template"而不是下划线的方法来引用模板;如果它是对 DOM 对象的字符串引用,Marionette 将使用下划线自动为您查找模板。
标签: javascript jquery backbone.js marionette