服务器端模板,客户端模板 - 自动转换?

时间:2010-12-19 22:16:29

标签: jquery templates client-side server-side

随着jQuery模板插件的发生,我想知道如何维护服务器端和客户端模板。

因为在我的情况下,我有一些模板,这将是重复的 - 服务器端和客户端。想象一下:

您有一个表单,您可以在其中输入列表点。当您按下提交时,会生成一个AJAX请求,但该条目已显示在您的页面上。

现在,这个项目符号的标记应该是相同的 - 它是通过JS或我的PHP / .NET /任何应用程序生成的。

有没有什么好方法可以维护这些模板/让它们保持同步?或者我真的必须手动维护两个模板吗?

您在使用JS模板的应用程序方面有什么经验?

5 个答案:

答案 0 :(得分:5)

如果你喜欢 JS-> PHP优先级 :)那么你有两个用于PHP后端的jquery-tmpl兼容模板渲染器

  1. https://github.com/abackstrom/jquery-tmpl-php
  2. https://github.com/xyu/jquery-tmpl-php
  3. 如果你更喜欢 PHP-> JS优先级 :)那么你可以尝试这个流行的PHP模板Smarty的Javascript实现

    1. http://code.google.com/p/jsmart/
    2. 或者你可以尝试更像中性的东西:

      1. 小胡子http://mustache.github.com/

答案 1 :(得分:0)

我的同事是你提到的.NET解析器的作者,所以我在客户端和服务器之间分享了很多模板。要清楚 - 它是相同的模板,同一个文件,无论它是在客户端还是服务器上进行解析。所以没有重复/维护问题,这非常好。

我们遇到的唯一警告是高级逻辑。模板渲染的数据在渲染时或多或少需要打印。因此,检查数组长度需要是布尔值,结果是,字符串需要复数,日期需要格式化等等。我相信Aaron正致力于将函数作为命名参数传递给.NET版本,以便例如客户端模板范围内可用的复数函数可以在C#中复制并在服务器上以相同的方式使用,允许在模板中进行更多的逻辑和处理。尽管如此,即使必须对数据进行预处理,它也非常有用。

答案 2 :(得分:0)

Spark View Engine(.NET)具有javascript呈现功能: http://blog.robertgreyling.com/2009/11/teaching-javascript-how-to-render-your.html

只有一组模板的另一种方法是只进行服务器端渲染,使用ajax从服务器获取更新的html。

答案 3 :(得分:0)

我通常将它们存储在视图;在这里,我将告诉你一个我为jquery-tmpl找到的一个非常有趣的用例。

我在一个网站上使用jquery-tmpl,由于请求量很大,我需要一种我称之为decontextualization的技术。这项技术的实施只是为了在高峰时段保持活力,它完全由以下规则组成:

  1. 切勿触摸服务器多次重新生成页面;除非它绝对必要。
  2. 使用JavaScript提供用户所处的状态以及他拥有的权限。
  3. 考虑到这两个规则,您可能会注意到jquery-tmpl具有基本逻辑量的jquery-tmpl对于给定的案例而言只是威风凛凛。我所做的基本上是将d18n模板包含在需要进行descontextualized的文档中。所有模板都是由页面本身提供的;所以我可以创建一个jquery-tmpl javascript库,它可以执行以下操作:

    1. 查询关于当前用户的非常快的脚本,将数据作为JSON对象返回。
    2. 遍历JSON并在指定选择器上包含文档上提供的模板。让jquery-tmpl做数学运算。
    3. 每当我们需要对“tempalte”进行修改时,如果没有<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> 可用,我们会按照我们的方式进行修改:在视图/部分

      您可以在“用户编辑帖子”中查看类似的内容吗?模板:

      {{1}}

      希望我的经验在某种程度上对你有用。

答案 4 :(得分:-1)

我使用XSLT。不是每个人都喜欢它的语法,但它 crossbrowser,快速且有效 - 你甚至可以通过使用一个目标嵌入式iframe的表单来完成客户端模板,而不需要太多任何脚本 - 具有小的过线文件(略大于json,但不多)的优点。 iOS设备不支持它;这些将需要使用服务器模板化的版本 - 但好的是,使用相同的模板可以轻松实现。

我不是javascript模板库的忠实粉丝:它们很复杂,依赖于版本,通常工具很差,随着浏览器的变化而容易中断,并且通常会将您绑定到特定的JavaScript库。