Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 木偶:加载外部把手模板文件_Javascript_Templates_Backbone.js_Marionette - Fatal编程技术网

Javascript 木偶:加载外部把手模板文件

Javascript 木偶:加载外部把手模板文件,javascript,templates,backbone.js,marionette,Javascript,Templates,Backbone.js,Marionette,我想做的是配置木偶加载外部把手模板文件,而不是 我无意中发现了@Derick Bailey在。。。但是很明显,它对我不起作用,因为正如其中一条评论所指出的,我得到的是相同的回调是未定义的。我正在使用木偶2.2.0。。。顺便说一下 这就是我得出的结论:- Backbone.Marionette.Renderer.render = function ( templateId, data ) { console.log( "render() - " + templateId + " " + J

我想做的是配置木偶加载外部把手模板文件,而不是

我无意中发现了@Derick Bailey在。。。但是很明显,它对我不起作用,因为正如其中一条评论所指出的,我得到的是相同的回调是未定义的。我正在使用木偶2.2.0。。。顺便说一下

这就是我得出的结论:-

Backbone.Marionette.Renderer.render = function ( templateId, data ) {
    console.log( "render() - " + templateId + " " + JSON.stringify( data, null, 4 ) );

    var promise = Backbone.Marionette.TemplateCache.get( templateId );

    $.when( promise ).done( function ( template ) {
        console.log( "render() - promise fulfilled - " + template );
        return template( data );
    } );
};

Backbone.Marionette.TemplateCache.prototype.loadTemplate = function ( templateId ) {
    console.log( "loadTemplate() - " + templateId );
    var tmpId = templateId.replace( "#", "" ),
        url = "resources/js/templates/" + tmpId + ".html";

    var renderer = $.Deferred();
    $.get( url, function ( templateHtml ) {
        console.log( "loadTemplate() - URL get - " + templateHtml );
        renderer.resolve( Handlebars.compile( templateHtml ) );
    } );

    return renderer.promise();
};
虽然我没有收到任何错误,但我也没有在屏幕上看到任何渲染模板

查看Firebug控制台,我看到以下内容

我怎么修理它?我花了几个小时试图解决这个问题,但现在我感到沮丧


非常感谢。

实现中的主要问题是Backbone.marionete.Renderer.render的声明

调用Backbone.marionete.TemplateCache.get templateId以接收承诺对象时,Backbone.marionete.TemplateCache.get templateId调用

从load函数的定义可以看出,它不会像您期望的那个样返回承诺,但它将调用compileTemplatetemplate并返回它的结果

正如我从你的源代码中看到的,你没有改变这个;方法,它仍在使用


要解决您的任务,只需解决该问题并重试,或者使用建议的几乎相同的方法

我已经找到了这个问题的解决方案:-

Backbone.Marionette.TemplateCache.prototype.loadTemplate = function ( templateId ) {
    var template = '',
        url = 'resources/js/templates/' + templateId + '.html';

    // Load the template by fetching the URL content synchronously.
    Backbone.$.ajax( {
        async   : false,
        url     : url,
        success : function ( templateHtml ) {
            template = templateHtml;
        }
    } );

    return template;
};

// Instruct Marionette to use Handlebars.
Marionette.TemplateCache.prototype.compileTemplate = function ( template ) {
    return Handlebars.compile( template );
};

如果您希望加载外部下划线模板文件,则可以安全地忽略Marionette.TemplateCache.prototype.compileTemplate,以便Marionette将使用默认的下划线模板

这个答案重复了我在答案中提到的最后一个链接。请删除它。@VahanVardanyan真正的问题是你的答案没有包含链接中提到的信息。
Backbone.Marionette.TemplateCache.prototype.loadTemplate = function ( templateId ) {
    var template = '',
        url = 'resources/js/templates/' + templateId + '.html';

    // Load the template by fetching the URL content synchronously.
    Backbone.$.ajax( {
        async   : false,
        url     : url,
        success : function ( templateHtml ) {
            template = templateHtml;
        }
    } );

    return template;
};

// Instruct Marionette to use Handlebars.
Marionette.TemplateCache.prototype.compileTemplate = function ( template ) {
    return Handlebars.compile( template );
};