[英]pre-compiling jsrender templates
我有几个在所有页面上都使用的jsRender模板。 与其使用script标记方法,不如预编译它们并将结果函数放在外部js文件中。
我看到了先前的问题 ,但所描述的方法似乎不再起作用,或者我做错了事。
我从控制台调用了$ .templates(“#myTemplate”),msanjay建议并复制/重命名了匿名函数,并得到了类似的内容(这对我未经训练的人来说有点奇怪):
function myTemplate(data, view, j, b, u) {
var j = j || jQuery.views, h = j.converters.html, ret; try {
return "<div...";
} catch (e) { return j._err(e); }
}
如果然后我尝试通过调用var html = $ .render(data,myTemplate);使用此模板, 我收到一个错误:
未捕获的TypeError:对象函数(a,b)的属性“ render” {返回新的p.fn.init(a,b,c)}不是函数
不知道jsRender是否已更改,这不再可能,或者我做错了什么,但是任何指导将不胜感激。
上次更新有很多API更改。 看起来$.render
现在只是empty object
。
查看此页面提供用于预编译模板的工具 ,您将找到此演示: JsRender:变量和详细信息
例如,您可以尝试以下操作:
var movies = [
{ name: "The Red Violin", releaseYear: "1998" },
{ name: "Eyes Wide Shut", releaseYear: "1999" },
{ name: "The Inheritance", releaseYear: "1976" }
];
var myTemplate = $.templates( "<div>{{:#index+1}}: <b>{{>name}}</b> ({{>releaseYear}})</div>" );
$("#movieList").html(myTemplate.render( movies));
演示: http : //jsfiddle.net/76nMC/
您可以通过从字符串编译模板来获得所需的内容。 简而言之,它看起来像这样:
$.templates({
myTemplateName: " blah blah {{>something}} blah "
});
var tempHtml = $.render.myTemplateName(myData);
我意识到您可能会因为预先编译模板会节省一些执行时间而陷入困境,但是以我的经验,jsrender是如此之快,我从未注意到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.