0

这就是我目前的做法,但我想做的是从模板中渲染数据而不这样做(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}
4

1 回答 1

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

那样:

  • 一切都自动发生
  • 你不必重复任何事情
  • 如果您想添加更多(例如,您希望能够将模板定义为字符串,或者您想在脚本标签中定义它们并指定这些标签的 ID,并让您的视图将其编译到 Handlebars 模板中)你)添加起来超级容易
于 2013-04-26T23:17:56.353 回答