这就是我目前的工作方式,但我想做的是从模板渲染数据而不执行此操作(serialized_model.items [0]):
template: function(serialized_model){
var user_data_tmpl = $("#user-data-template").html();
var template = Handlebars.compile(user_data_tmpl);
return template(serialized_model.items[0]);
}
我很难得到结果,但这是完整的代码:
模特&系列:
window.UserData = {};
UserData.Model = Backbone.Model.extend();
UserData.Collection = Backbone.Collection.extend({
model:UserData.Model,
url: '/getUserData',
parse: function(response) {
return response.data;
}
});
观点:
UserData.View = Backbone.Marionette.ItemView.extend({
template: function(serialized_model){
var user_data_tmpl = $("#user-data-template").html();
var template = Handlebars.compile(user_data_tmpl);
return template(serialized_model.items[0]);
}
});
模板:
<script id='user-data-template' type='text/x-handlebars-template'>
<a href="#" id="logout"> Logout </a>
uid:{{uid}} username:{{username}} clave:{{clave}}
</script>
JSON:
{"success":true,"data":{"logged":true,"uid":14,"clave":14,"depto":9,"nivel":5},"report":null}
答案 0 :(得分:1)
我们在代码库中处理此问题的方法只是拥有一个BaseView
类,我们的所有视图都来自此类。这个视图有一个renderTemplate
方法和一些支持方法,看起来像这样:
renderTemplate: function() {
this.$el.html(this.templatedHtml());
return this;
},
templatedHtml: function() {
return this.template(this.getTemplateData());
},
getTemplateData: function() {
return _({}).extend(this.model.toJSON());
}
我们比这更复杂,但希望你能得到这个想法。关键是,如果您在renderTemplate
类上自己构建BaseView
方法,那么您可以创建新视图...
var YourView = BaseView.extend({
template: yourCompiledTemplate
});
var yourViewInstance = new YourView({model: someModel});
// Apply template to yourViewInstance:
yourViewInstance.renderTemplate();
那样: