2012-10-27 100 views
1

我有幾個jsRender模板在所有頁面上使用。而不是使用腳本標記方法,我寧願預編譯它們並將結果函數放在外部js文件中。預編譯jsrender模板

我看到一個previous question問這個問題,但所描述的方法似乎不再有效,或者我做錯了什麼。

我叫$從中msanjay建議和複製控制檯.templates(「#MyTemplate的」)/改名爲匿名函數,並得到這樣的事情(這看起來有點奇怪我外行人):

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){返回新p.fn.init(A,B,C)}不是一個函數

的 '渲染'不知道jsRender是否已經改變,這已不再可能,或者如果我做錯了什麼,但任何指導將不勝感激。

+0

看起來你的jsRender文件沒有被正確包含。換句話說,'$ .render'似乎不是一個函數。總是最好提供一個演示,比如用jsFiddle。 –

回答

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/

0

你可能會得到你想要的compiling templates from strings什麼。簡單地說,它看起來像這樣:

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

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

我知道你可能會停留在其上的概念,它會爲你節省一些執行時間預編譯模板的概念,但在我的經驗jsrender是如此之快我從來沒有注意它。