2010-12-19 125 views
14

隨着jQuery模板插件的事件,我想知道如何維護服務器端和客戶端模板。服務器端模板,客戶端模板 - 自動轉換?

因爲在我的情況下,我有一些模板,這將是重複的 - 服務器端以及客戶端。試想一下:

您有一個表單,您可以在其中輸入列表點。當你按下提交時,會產生一個AJAX請求,但該條目已經顯示在你的頁面上。

現在,這個項目符號點的標記應該是相同的 - 它是通過JS或我的PHP/.NET /任何應用程序生成的。

有沒有什麼好的方法來維護這些模板/保持同步?或者我真的必須手動維護這兩個模板?

你在使用JS模板的應用程序中的經驗是什麼?

+0

你提出的偉大點,我很驚訝它不是更多的說。我問菲爾哈克關於這個(http://haacked.com/archive/2010/11/09/asp-net-mvc-3-release-candidate.aspx)他的答案令人困惑 - 戴夫沃德也提到需要jquery tmpl視圖引擎 - http://encosia.com/2010/12/02/jquery-templates-composite-rendering-and-remote-loading/。 – redsquare 2010-12-19 23:54:55

+0

我剛纔看到https://github.com/awhatley/jquery-tmpl.net和https://github.com/xyu/jquery-tmpl-php - 都嘗試將jQuery tmpl引擎移植到.NET/PHP。 – 2010-12-20 00:07:24

+0

增加了一個有趣的用例,可能對你有用。好幾個月前我們必須解決的問題。 – MarioRicalde 2011-05-20 13:06:43

回答

0

我的同事是你提到的.NET分析器的作者,所以我用它來分享客戶端和服務器之間的模板。要清楚 - 不管是在客戶端還是服務器上解析,都是相同的模板,相同的文件。所以沒有重複/維護頭痛,這是非常好的。

我們遇到的唯一警告是高級邏輯。渲染時模板呈現的數據需要更多或更少的打印準備。因此,檢查數組長度需要是布爾值,結果是,字符串需要複用,日期需要格式化等。我相信Aaron正在努力將函數作爲命名參數傳遞給.NET版本,所以例如客戶端模板範圍內可用的複數函數可以在C#中複製,並在服務器上以相同方式使用,從而允許在模板中執行更多邏輯和處理。儘管如此,即使需要預處理數據,它也是非常有用的。

-1

我爲此使用XSLT。不是每個人都喜歡它的語法,但它 crossbrowser,速度快,並且可以工作 - 甚至可以通過使用指向嵌入式iframe的表單,在沒有任何腳本的情況下使用客戶端模板 - 具有小的過線文件(稍大於json,但不多)。 iOS設備不支持它;這些將需要使用服務器模板版本 - 但好的是,使用相同的模板可以輕鬆實現。我不是JavaScript模板庫的巨大粉絲:它們非常複雜,依賴於版本,通常工具很差,隨着瀏覽器更改可能會中斷,並且通常會將您綁定到特定的JavaScript庫。

0

我通常將它們存儲在視圖;在這裏我要告訴你關於jquery-tmpl的一個非常有趣的用例。

我在一個網站上使用jquery-tmpl,由於請求數量巨大,我需要一種技術,我請求decontextualization。這項技術只是爲了在繁忙時間保持活力而實施,它純粹遵循以下規則:

  1. 切勿觸摸服務器以多次重新生成頁面;除非它是絕對是必需的。
  2. 使用JavaScript提供的狀態爲誰是的用戶以及他擁有什麼特權。

考慮到這兩條規則,您可能注意到jquery-tmpl所提供的邏輯基本數量對於給定的情況來說是非常宏偉的。我所做的基本上是將jquery-tmpl模板包含在需要解除語境化的文檔中。所有的模板都是由頁面本身提供的;所以我可以做一個d18n javascript庫可能做到以下幾點:

  1. 查詢有關當前用戶一個非常快的腳本,作爲JSON對象返回數據。
  2. 遍歷JSON並在指定的選擇器中包含文檔上提供的模板。讓jquery-tmpl做數學。

每當我們需要做的修改的「tempalte」我們會做同樣的方式,我們將做到這一點,如果沒有可用的jquery-tmpl在視圖/部分

您可以查看「Can user edit post?」這樣的內容。模板:

<script id="post-edit-button" type="text/x-jquery-tmpl"> 
    {{if user_id == "<%= post.user.id %>" || role == "staff" || $.inArray(user_id, EDITORS) }} 
    <a href="<%= edit_post_url(post) %>">Edit</a> 
    {{/if}} 
</script> 

希望我的經驗在某種程度上對您有用。