我正在使用icanhaz.js和小胡子来加载模板,我正在使用以下方法按需加载小胡子模板:
loadTemplate: function(name, callback) {
if (!ich.templates[name+"_template"]) {
jQuery.get("/js/templates/"+name+".mustache", function(data) {
window.ich.addTemplate(name+"_template", data);
callback();
});
} else {
callback();
}
}
但是,检查调试器中返回的数据变量有时会返回Document对象而不是我可以使用的原始字符串.我有时说,因为如果模板文件中的html在文件顶部没有嵌套的DOM元素,模板会按需加载.这是一种非常奇怪的行为,我希望得到一些帮助解释.
所以,例如,模板文件:
<div>
<div>My name is {{name}}</div>
</div>
将在加载时作为Document对象返回.
然而,这个模板文件:
<div></div>
<div>
<div>My name is {{name}}</div>
</div>
根据需要作为原始字符串返回.
我不确定为什么没有任何孩子的那个顶级div应该对被识别为Document与字符串的模板产生影响.有任何想法吗?
最佳答案 由于您没有为$.get()提供dataType参数,因此您正在以“智能猜测”模式运行.
related documentation说:
If none is specified, jQuery will try to infer it based on the MIME
type of the response (anXML
MIME type will yield XML, in 1.4JSON
will yield a JavaScript object, in 1.4script
will execute the script,
and anything else will be returned as a string).
因此,您的服务器可能会将某些模板发送为text / html(或text / plain),将其他模板作为text / xml发送.检查响应头(使用Fiddler或等效工具)检查是否确实如此,这将是很有趣的.
顺便说一句,指定请求的数据类型应该完全消除这个问题:
jQuery.get("/js/templates/" + name + ".mustache", function(data) {
window.ich.addTemplate(name + "_template", data);
callback();
}, "html"); // Always return HTML as plain text.