Marionette.js动态更改模板,requireJS无效

时间:2014-09-22 19:40:10

标签: javascript backbone.js requirejs marionette

这是我的代码:

    render: function () {
        var data = this.serializeData(),
            that = this;
        require(['text!trigger-menu/confirmation/' + that.model.get('type') + '-template.html'],
            function(templateHTML) {
               var html = _.template(templateHTML, data);
               that.$el.html(html);
        });
    }

我有3种不同的确认视图可以显示。 3个中的2个正在工作。那个不是这样的人:

<ul>
    <% _.each(signupForms, function (signup) { %>
        <li><%- signup.name %></li>
    <% }); %>
    <% _.each(authorizedApps, function (app) { %>
        <li><%- app.name %></li>
    <% }); %>

    <% if ((!signupForms && !authorizedApps) || (!signupForms.length && !authorizedApps.length)) { %>
        <li>All signups</li>
    <% } %>
</ul>

错误为Uncaught NotFoundError: Failed to execute 'appendChild' on 'Node': The new child element is null.

其他人遇到此错误?

1 个答案:

答案 0 :(得分:0)

您可以在初始化视图时执行此操作,而不是更改渲染函数中的模板:

define([
    'jquery',
    'underscore',
    'backbone',
    'marionette',
    'text!templates/template1.html',
    'text!templates/template2.html',
], function ($, _, Backbone, Marionette, template1, template2) {
    var View = Backbone.Marionette.ItemView.extend({
        initialize: function () {
            if({YourConditionHere}){
this.template = Marionette.TemplateCache.get(template1);
        }else{
this.template = Marionette.TemplateCache.get(template2);
    });
    // Our module now returns our view
    return View ;
});