2011-08-12 26 views
10

我目前的任務是爲特定的DOM生成和提供集中的模板 - 對於這個例子,我們只是說它是一種形式。nodejs或envjs - 動態jquery tmpl

基本上我想把每個表單元素(從標籤,輸入到div封裝),並保存爲個人templates

從那裏我們將有一個用戶界面,我們的生產者可以將這些形式拼湊在一起。一旦他們決定如何將他們的表格放置出來(DOM順序和結構對於這個項目來說實際上是至關重要的,它不能是一個純CSS的解決方案),我們平臺上的腳本將保存一個JSON對象,基於模板名稱的DOM結構,以後我可以在頁面加載時參考。

我在想這裏的一個理想的解決方案是將該JSON對象發送到節點服務器或使用envjs'構建'這個dom,然後將它分配給一個PHP變量以包含在CodeIgniter視圖中它可以被Google索引。

我知道jQuery本身與envjs合作,我知道有JQuery plugin for node,但唉,這是我的第一個服務器端JS項目,它恰好是非常重要的。我能夠通過命令行獲得envjs在本地機器上的工作,但完成一項簡單任務需要10-30秒。如果envjs是要走的路,我怎樣才能讓它在後臺運行,並讓腳本引用它? PHP curl到Tomcat上的envjs servlet可能嗎?

一個警告是我的本地開發人員是WAMP(IT不會讓我們有本地unix機器),但我們的測試和生產環境都是LAMP。我確實有一個我可以測試的個人LAMP服務器,如果這是絕對唯一的方法,但是在個人服務器上編寫公司資料可能會讓我受到一些熱情。

不幸的是,我沒有時間研究所有的可能性,並嘗試/失敗,因爲我通常會在我自己的時間使用新技術。想法,指導,代碼示例 - 任何可以幫助我決定如何解決這個問題的方法都將不勝感激。

+4

Envjs沒有得到大家的支持和社區節點附近的任何地方。節點尚未準備好用於Windows。最好的辦法是在你的WAMP堆棧上運行一個linux虛擬機並使用節點。 (然後在node&php之間進行TCP通信) – Raynos

+0

即使MS已決定將端口nodejs移植到windows。這意味着節點有很大的機會和支持。我猜這個nodejs會更適合你。對於模板引擎來看看Jade有用,簡單而強大。 –

+0

謝謝@Pasha - 我被tmpl卡住了,因爲它已經在我們的框架中使用了。 – AlienWebguy

回答

9

簡答:使用節點。立即使用它。事實上,這裏的最新的原生Windows的exe一個鏈接,是獨立的,無依賴性:http://nodejs.org/dist/v0.5.4/node.exe

龍答:env.js是/是一個很酷的項目。它模擬js中的js環境。它可以運行在其他環境和東西。無論如何,這並不重要。

Node.js是一個運行在V8之上的js主機環境。 V8是目前最快的js環境,支持Chrome等等。節點本身是針對本地系統環境的,常見的js就是瀏覽器:將API混合在一起,以便於開發人員使用,功能廣泛組。

在瀏覽器中,您可以通過DOM擴展來控制視頻,音頻,用戶輸入等。通過服務器上的節點(或者只有您自己的計算機,它具有超出常規服務器使用情況的應用程序數量),您可以爲所有類型的IO獲得令人難以置信的支持:http/udp服務器和爲您執行所有樣板工作的客戶端,文件I/O,用於處理所述網絡和文件I/O的管理數據流,用於產生並與子進程或fork進程通信的訪問,以及直接訪問V8的編譯器以編譯和保存/運行javascript字節碼。

關於DOM,DOM節點和多個部分至少有一個完整的(html)實現。至少我知道的YUI,jQuery和MooTools可以在Node的頂層運行在Node上,以便像在瀏覽器中一樣從任何源代碼構建DOM,然後將其序列化爲html或其他格式。

https://github.com/tmpvar/jsdom是在節點(或我相信任何JavaScript環境)上運行的DOM實現。

https://github.com/tmpvar/jsdom/blob/master/example/browser/browser.js是模擬瀏覽器的一個例子:

var sys = require('sys'); 
var dom = require('../../lib/jsdom/level2/html').dom.level2.html; 
var browser = require('../../lib/jsdom/browser/index').windowAugmentation(dom); 

var document = browser.document; 
var window = browser.window; 

var el = document.createElement('div'); 
el.id = 'foo'; 
el.innerHTML = '<em>This is a test</em> This <strong class="odd">is another</strong> test '; 
document.body.appendChild(el); 

sys.puts(document.outerHTML); 

其他一些庫可能開導自己的方式

7

只是值得考慮的幾點。

Envjs之間的差異Nodejs是巨大的。 Envjs是Rhino默認實現的模擬瀏覽器環境。需要注意的是,一個人(和開發人員)可以使用Nodejs實現Envjs。在另一方面的NodeJS是谷歌的V8引擎,這是非常強大的一個事件觸發JavaScript環境並有地塊可用

從你所說的,它聽起來就像你正在尋求建立一個jQuery TEM1與哪些模塊的在客戶端基於用戶交互,最終成爲類似的東西。

<script id="dynamicTemplate" type="text/x-jquery-tmpl"> 
    {{tmpl "smallTemplate1"}} 
    <tr><td>key: ${value}</td></tr> 
</script> 

然後你就可以在序列化一些JSON方式發送到服務器以重現(你顯然已經完成)。在服務器端,您正在尋找關於如何執行反序列化模板的指導。

在這個特殊的時候,我會強烈建議與節點jqtpl模塊,該模塊是jQuerys模板引擎的一個端口的NodeJS其中有相當大的下面https://github.com/kof/node-jqtpl

此外,如果你有能力的NodeJS;我非常希望看到如何安全地將模板序列化到JSON中,因爲我認爲這是最困難的部分。

+0

術語「插件」與節點結合使用表明您不使用節點。 – Raynos

+3

對不起,「模塊」然後(有點粗魯壽),爲什麼節點沒有準備好Windows,因爲文檔解釋非常清楚如何做? https://github.com/joyent/node/wiki/Installation – martin