如何将Handlebars模板集成到Marionette View?

时间:2014-09-18 13:15:00

标签: templates backbone.js handlebars.js marionette

在我的应用程序中,我使用的是把手模板插件,我在这里有点困惑,如何将把手模板集成到使用单独模板的牵线木偶项目视图?

这是我的代码:

define([
    'jquery',
    'underscore',
    'backbone',
    'marionette',
    'hbs!scripts/templates/login/loginTemp'], // this is my handlebars template.
    function ($,_,Backbone,Marionette,loginTemplate) {
        "use strict";
        socialApp = window.socialApp || {};

        socialApp.loginView = Backbone.Marionette.ItemView.extend({
            tagName:'div',
            className:'loginContainer',
            template: '#loginTemplate' //this is template for login alone (from DOM )
        });

        return socialApp.loginView;
    }
);

“loginTemp” - 包含登录模板所需的所有详细信息。

3 个答案:

答案 0 :(得分:1)

您可以覆盖Marionette.TemplateCache.prototype.compileTemplate函数以实现所需的行为:

 Marionette.TemplateCache.prototype.compileTemplate = function (yourRawTemplate) {
        // In case if template is function
        if (_.isFunction(yourRawTemplate)) {
            return yourRawTemplate;
        } else {
            return Handlebars.compile(yourRawTemplate);
        }
 };

答案 1 :(得分:1)

我的" Marionette-Handlebars Boilerplate" 可能对您有所帮助:
https://github.com/yuraji/marionette-handlebars-boilerplate

答案 2 :(得分:0)

如果您在木偶应用程序中使用区域,例如

socialApp.addRegions({
  loginRegion:'<id of the region>'
})

如果您的模板是在脚本标记内编写的,那么您可以轻松地以这种方式呈现模板:

//defining the view
socialApp.loginView = Marionette.ItemView.extend({
  template:Handlebars.compile(document.getElementById('loginTemplate').innerHTML),
  ...
  ...//other code and view logic
});

然后,

var loginView = new socialApp.loginView();  //creating instance of the view
socialApp.loginRegion.show(loginView);  //rendering it inside the region