Javascript 木偶:加载外部把手模板文件
我想做的是配置木偶加载外部把手模板文件,而不是 我无意中发现了@Derick Bailey在。。。但是很明显,它对我不起作用,因为正如其中一条评论所指出的,我得到的是相同的回调是未定义的。我正在使用木偶2.2.0。。。顺便说一下 这就是我得出的结论:-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
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 );
};