1
我想使用jQuery Templates。初看起來,{{tmpl}}標籤似乎是要走的路,但我需要在模板化時進行額外的步驟,而且我無法弄清楚如何執行此操作。嵌套模板問題
有一個數據類型定義與數據對象的屬性相關。在下面的例子中,'movie'是一個文本字段,'released'是一個數字字段。所有文本字段使用特定的模板,所以所有的數字字段。這些嵌套模板對使用它的上下文(這裏是電影)一無所知。因此,那裏使用的標籤總是$ {value}。 「外層」模板反而知道電影應該是什麼樣子。它的標籤(電影和發佈)被「內部」數據類型相關模板取代。額外的步驟是在外部模板完成之前替換$ {value}。
所有我能想出是這樣的:
//the template used for all string-fields
var templForStrings = "<b>${value}</b>";
//the template used for all numeric fields
var templForNum = "<i>${value}</i>";
//data of a movie
var data = {};
data.movie = "Cowboys and Aliens"; //a string field
data.released = 2011; //a numeric field
//the template to show a movie
var templForMovies = "<div>{{html movie}} ({{html released}})</div>";
//normally a loop over the fields here
var field = {value: data.movie};
data.movie = $.tmpl(templForStrings, field).fullhtml();
field.value = data.released;
data.released = $.tmpl(templForNum, field).fullhtml();
//now the movie template
$.tmpl(templForMovies, data).appendTo("body");
當然這個場景被簡化。數據類型模板比這更復雜。數據可以是任何東西。由於$ {value}在這裏意味着兩件不同的事情,所以我不知道如何使用插件提供的嵌套模板。但我敢肯定有一個更優雅,更快捷的方式比我的代碼(這甚至需要fullhtml-Plugin。這真的是很好,有這樣
<div>${movie} (${released})</div>
,因爲這些模板是可創建最終用戶過了,應該是儘可能簡單
聰明的主意:)我實際上通過使用DOM繞過了這個問題。 – user414873 2011-01-21 08:37:44
謝謝,我不得不在某些值上渲染不同的「類型」TD基礎時做類似的事情。如果你喜歡解決方案,請將Plz標記爲答案:) – 2011-01-21 14:58:07