1

我有几个用于所有页面的 jsRender 模板。我宁愿预编译它们并将生成的函数放在外部 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); 来使用这个模板 我收到一个错误:

未捕获的类型错误:对象函数 (a,b){return new p.fn.init(a,b,c)} 的属性“渲染”不是函数

不确定 jsRender 是否已更改并且不再可能,或者我做错了什么,但任何指导都将受到高度赞赏。

4

2 回答 2

0

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

看这个页面提供预编译模板的工具,你会发现这个演示: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/

于 2012-10-27T19:33:06.927 回答
0

通过从 strings 编译模板,您可能会得到您想要的。简而言之,它看起来像这样:

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

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

我意识到你可能会停留在预编译模板的概念上,因为它会为你节省一些执行时间,但根据我的经验,jsrender 太快了,我从来没有注意到它。

于 2012-10-27T19:42:22.660 回答