骨干牵线木偶复合视图渲染模板
我正在尝试使用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); });
模板:
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来显示集合,但您需要定义一个childView
来呈现模型
var LeafView = Backbone.Marionette.ItemView.extend({ // ... }); var TreeView = Backbone.Marionette.CollectionView.extend({ childView: LeafView })
这是一个更新的小提琴。 http://jsfiddle.net/6ok1rptq/
现在显示在html中的“结果”,不熟悉下划线源,我相信这是由于给予模板的data
为空的事实,并且快速查看下划线源显示它正在使用with
http://underscorejs.org/docs/underscore.html#section-148
“如果未指定变量,请将数据值放在本地范围内。”
意味着模板找不到“名称”变量,而是在全局范围( window
)中查找
结果只是包含小提琴结果的jsfiddle iframe的名称
阅读marrionnete docs更近一点 – 你需要一个childView定义….
我没有对此进行测试,但我认为错误在于你没有在CompositeView上定义Marionette Itemview。
逻辑结构是像在问题中一样将Compositeview传递给集合,模型将在单独的项目视图中呈现。
在项目视图中,您可以致电:
this.model.get("property");
从视图中访问属性。