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() )
});