2012-07-12 66 views
3

我用敲除和jQuery.tmpl框架在我的項目,有時我用jQuery的TMPL才產生這樣的HTML:我可以使用敲除作爲模板引擎嗎?

var html = $("#template").tmpl(data); 
html.appendTo(destElement); 

我不喜歡那地方我有淘汰賽模板結合某處用於html生成的jquery模板,也用於綁定。

我想知道knockout是否能夠像jquery tmpl那樣從模板生成html。 如果是這樣,我將完全刪除jquery-tmpl,因爲在大多數情況下,我僅將它用於從模板生成html。

請指點

回答

3

AFAIK淘汰賽不支持預編譯模板存儲爲像jQuery模板的JavaScript變量一樣。

因此,您在問題中提供的示例不可能僅使用Knockout模板綁定。綁定確實提供了一些callbacks for post- and after-rendering,但是這不完全相同,因爲這些回調的輸入是編譯DOM元素,而不是JavaScript引用它。

我們目前的項目中,我們正在使用Handlebars作爲我們的模板引擎,主要有兩個原因,爲什麼我會選擇這樣的:

  1. jQuery的模板已被棄用,目前沒有官方的插件存在和jQuery UI的團隊不清楚他們是否將模板納入核心。
  2. 使用把手可以提取模板以分離可以從命令行預編譯的.handlebars文件。

我不使用淘汰賽模板結合,我所有的模板被提取到單獨的文件和預編譯分離的.js文件。我所要做的就是包含已編譯的.js文件,並且可以作爲JS變量訪問模板。

如果您選擇jQuery模板並希望預編譯模板,您必須將所有模板添加到一個HTML文件並編寫一些JavaScript,這些JavaScript將採用每個模板並將其轉換爲JavaScript,或者您可以編寫建立一個接受你的模板的小節點應用程序,將它們轉換並再次輸出。

+0

基本上我不需要預編譯模板,我只需要一種獲取評估HTML的方法。 – Madman 2012-07-12 17:48:07

+0

「評估」是什麼意思?如果您只是想將某些部分定義爲模板,您可以將jQuery放在板子上並使用KO的模板綁定,它也會執行相同的技巧,您不需要將其明確編譯爲JS,所有操作都將由綁定處理。 – thomaux 2012-07-12 18:00:49

+1

似乎我在這個方法中找到了我需要的東西ko.applyBindingsToNode(element,null,app.viewModel);但不完全。不同之處在於它將模板結果呈現爲元素,但是我需要結果作爲參考內存中的dom節點,正如我在問題 – Madman 2012-07-12 18:37:01

相關問題