javascript - Marionette LayoutView 删除了模板中的根 HTML 元素

标签 javascript backbone.js marionette

这是我的模板文件outerLayout.html:

<section id="index-wrapper">
    <navigation id="menu">menu1</navigation>
    <article id="content">main content</article>
    <footer id="footer">footer</footer>
</section>

这是我的outerLayout.js

var $ = require('jquery');
var Backbone = require('backbone');
Backbone.$ = $;
var Maronette = require('backbone.marionette');
var compiledTpl = require('./outerLayout.html');
// console.info('compiledTpl({})', compiledTpl({}));
    console.info('compiledTpl({})', compiledTpl({}));
var OuterLayout = Backbone.Marionette.LayoutView.extend({
    template: compiledTpl({}), 
    el: '#main',
    regions: {
        menu: '#menu', 
        content: '#content', 
        footer: '#footer'
    }
});

module.exports = new OuterLayout();

以下是路由器中渲染layoutView的代码:

var AppRouter = Backbone.Marionette.AppRouter.extend({
    routes : {
        '': 'index'
    }, 
    index : function () {
        var outerLayout = require('../layout/outerLayout/outerLayout');
        outerLayout.render();

    }
    }    
});

渲染结果为:

enter image description here

但结果应该是这样的:

enter image description here

简而言之,渲染函数删除了标签,这不是我的目标。我该如何修复它?

最佳答案

问题来自Marionette.TemplateCache.loadTemplateMarionette.TemplateCache.compileTemplate .

正如您从函数注释中看到的那样,您需要重写它们才能使用其他模板而不是 Underscore 的 _.template()

loadTemplate 定义中负责此行为(您的问题)的实际行是:

var template = Backbone.$(templateId).html();

因为,如果您没有重写 loadTemplatecompileTemplate,Marionette 会假设您使用默认下划线的模板(如果您尝试使用下划线,它将起作用)正如预期的那样)。

示例:

如果您使用 Handlebars对于模板:

Marionette.TemplateCache.prototype.compileTemplate = function (yourTemplate) {
    if ($.isFunction(yourTemplate)) {
        return yourTemplate;
    } else {
        return Handlebars.compile(yourTemplate);
    }
};

Marionette.TemplateCache.prototype.loadTemplate = function (yourTemplateId) {

    var yourTemplate;

    if (Handlebars.templates && Handlebars.templates[yourTemplateId]) {
        // from cache
        yourTemplate = Handlebars.templates[yourTemplateId];
    } else {
        // load it here
    }
    return yourTemplate;
};

因此,只需重写这些方法即可开始!

关于javascript - Marionette LayoutView 删除了模板中的根 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25590757/

相关文章:

javascript - 缩小的 JavaScript 代码会提高性能吗?

javascript - Dynatable.js 自定义排序

jquery-ui - 如何监听 Marionette.ItemView 中的 jquery-ui 事件

templates - 升级到 underscore 1.7 时出现模板错误

marionette - backbone.js 中的 Collection View 和复合 View

javascript - AngularJs 和 Angular-UI-Router 路由权限

javascript - 如何记录 AWS Amplify API.get 请求以查看 url 上的 queryStringParameters

javascript - 需要 js 使用 marionette 创建

backbone.js - Marionette PushState URL 处理 - 如何操作?

javascript - 如何在 Backbone Marionette 这样的单页框架中使用公共(public)的、跨域的 json 数据?