预编译jsrender模板

时间:2012-10-27 18:52:27

标签: javascript jquery jsrender

我在所有页面上都使用了几个jsRender模板。我宁愿预先编译它们并将结果函数放在外部js文件中,而不是使用脚本标记方法。

我看到一个previous question问了这个,但是所描述的方法似乎不再起作用或我做错了。

我从控制台调用了$ .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'{return new p.fn.init(a,b,c)}不是函数

不确定jsRender是否已经改变,这是不可能的,或者我做错了什么,但任何指导都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

上次更新有很多API更改。看起来$.render现在只是empty object

查看此页面Provide a tool for pre-compiling templates,您会看到此演示:JsRender: Variants and Details

例如,你可以试试这个:

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/

答案 1 :(得分:0)

compiling templates from strings你可能会得到你想要的东西。简而言之,它看起来像这样:

$.templates({
    myTemplateName: " blah blah {{>something}} blah "
});

var tempHtml = $.render.myTemplateName(myData);

我意识到你可能会坚持使用预编译模板这个概念,它可以节省你一些执行时间,但根据我的经验,jsrender是如此之快,我从来没有注意到它。