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

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

问题描述:

随着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

我的同事是你提到的.NET分析器的作者,所以我用它来分享客户端和服务器之间的模板。要清楚 - 不管是在客户端还是服务器上解析,都是相同的模板,相同的文件。所以没有重复/维护头痛,这是非常好的。

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

星火视图引擎(.NET)有一个JavaScript渲染functionnality: http://blog.robertgreyling.com/2009/11/teaching-javascript-how-to-render-your.html

另一种方法只有一个组模板是做唯一的服务器端渲染,使用AJAX来从更新的HTML服务器。

我为此使用XSLT。不是每个人都喜欢它的语法,但它 crossbrowser,速度快,并且可以工作 - 甚至可以通过使用指向嵌入式iframe的表单,在没有任何脚本的情况下使用客户端模板 - 具有小的过线文件(稍大于json,但不多)。 iOS设备不支持它;这些将需要使用服务器模板版本 - 但好的是,使用相同的模板可以轻松实现。我不是JavaScript模板库的巨大粉丝:它们非常复杂,依赖于版本,通常工具很差,随着浏览器更改可能会中断,并且通常会将您绑定到特定的JavaScript库。

如果你喜欢JS-> PHP优先 :)那么你有这个两个jQuery的TMPL兼容模板PHP后台渲染

  1. https://github.com/abackstrom/jquery-tmpl-php
  2. https://github.com/xyu/jquery-tmpl-php

如果你喜欢更多PHP-> JS优先 :)然后你可以试试这个流行的PHP模板化Smarty的Javascript实现

  1. http://code.google.com/p/jsmart/

或者你可以尝试一些比较中性的,如:

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

我通常将它们存储在视图;在这里我要告诉你关于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> 

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