Backbone Marionette - 模板中的日志模型
Backbone Marionette - Log Model in Template
我想知道如何记录 Backbone.Marionette CompositeView 模板中使用的模型?
我正在使用的 <% console.log(model) %>
导致错误 Uncaught ReferenceError: model is not defined
有没有办法从模板中记录模型的内容?
这是我的代码 fiddle:http://jsfiddle.net/16L1hen4/
这是我的模板和 JavaScript
模板:
<div id="main"></div>
<script type="text/template" id="tree-template">
<li><%- name %></li>
<% //This console.log fails and I don't know why %>
<% console.log('inside template model =',model) %>
</script>
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=akey'
});
// Tree branch view
var CompositeView = Backbone.Marionette.CompositeView.extend({
tagName: 'ul',
template: _.template( $('#tree-template').html() )
});
// Tree root view
var CollectionView = Backbone.Marionette.CollectionView.extend({
tagName: 'div',
className: 'js-tree-root',
childView: CompositeView,
});
var treeCollection = new TreeCollection();
treeCollection.fetch().done(function () {
var collectionView = new CollectionView({collection: treeCollection});
App.mainRegion.show(collectionView);
});
编辑: 在常规 Backbone.View 中,我可以将模型作为属性传递给数据。请注意,在此示例中,视图的模型通过 data
属性传递给模板,该属性可以记录在模板中。这在模板中可能很有用,可以测试模型上属性的存在。我不确定如何使用 Marionette CompositeView
执行此操作
var jsonData = {
"color": "red"
};
var TheModel = Backbone.Model.extend({
});
var TheView = Backbone.View.extend({
el: '#main',
tagName: 'ul',
template: _.template( $('#the-template').html() ),
render: function () {
var tmpl = this.template({data: this.model.toJSON()});
this.$el.html( tmpl );
}
});
var theModel = new TheModel(jsonData);
var theView = new TheView({model: theModel});
theView.render();
<div id="main"></div>
<script type="text/template" id="the-template">
<li><%- data.color %></li>
<% //Log the current model that the template uses %>
<% console.log('template model =',data) %>
</script>
这恰好与我在此处针对您的问题发布的答案有关:
并且是由同一问题引起的。 model
在模板上下文中未定义。
传递给模板的数据如下:
{_id: Object, name: "Level 1", children: Array[2]}
和 model
在此上下文中未定义。
如果您想 log/control 将数据传递给您的模板,您应该使用 SerializeData 这样的方式:
var CompositeView = Backbone.Marionette.CompositeView.extend({
tagName: 'ul',
serializeData: function(){
var data = Backbone.Marionette.CompositeView.prototype.serializeData.apply(this, arguments);
console.log(data);
return data;
},
template: _.template( $('#tree-template').html() )
});
我想知道如何记录 Backbone.Marionette CompositeView 模板中使用的模型?
我正在使用的 <% console.log(model) %>
导致错误 Uncaught ReferenceError: model is not defined
有没有办法从模板中记录模型的内容?
这是我的代码 fiddle:http://jsfiddle.net/16L1hen4/
这是我的模板和 JavaScript
模板:
<div id="main"></div>
<script type="text/template" id="tree-template">
<li><%- name %></li>
<% //This console.log fails and I don't know why %>
<% console.log('inside template model =',model) %>
</script>
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=akey'
});
// Tree branch view
var CompositeView = Backbone.Marionette.CompositeView.extend({
tagName: 'ul',
template: _.template( $('#tree-template').html() )
});
// Tree root view
var CollectionView = Backbone.Marionette.CollectionView.extend({
tagName: 'div',
className: 'js-tree-root',
childView: CompositeView,
});
var treeCollection = new TreeCollection();
treeCollection.fetch().done(function () {
var collectionView = new CollectionView({collection: treeCollection});
App.mainRegion.show(collectionView);
});
编辑: 在常规 Backbone.View 中,我可以将模型作为属性传递给数据。请注意,在此示例中,视图的模型通过 data
属性传递给模板,该属性可以记录在模板中。这在模板中可能很有用,可以测试模型上属性的存在。我不确定如何使用 Marionette CompositeView
var jsonData = {
"color": "red"
};
var TheModel = Backbone.Model.extend({
});
var TheView = Backbone.View.extend({
el: '#main',
tagName: 'ul',
template: _.template( $('#the-template').html() ),
render: function () {
var tmpl = this.template({data: this.model.toJSON()});
this.$el.html( tmpl );
}
});
var theModel = new TheModel(jsonData);
var theView = new TheView({model: theModel});
theView.render();
<div id="main"></div>
<script type="text/template" id="the-template">
<li><%- data.color %></li>
<% //Log the current model that the template uses %>
<% console.log('template model =',data) %>
</script>
这恰好与我在此处针对您的问题发布的答案有关:
并且是由同一问题引起的。 model
在模板上下文中未定义。
传递给模板的数据如下:
{_id: Object, name: "Level 1", children: Array[2]}
和 model
在此上下文中未定义。
如果您想 log/control 将数据传递给您的模板,您应该使用 SerializeData 这样的方式:
var CompositeView = Backbone.Marionette.CompositeView.extend({
tagName: 'ul',
serializeData: function(){
var data = Backbone.Marionette.CompositeView.prototype.serializeData.apply(this, arguments);
console.log(data);
return data;
},
template: _.template( $('#tree-template').html() )
});