有没有人尝试在服务器端使用jQuery 模板(或任何其他基于 JavaScript 的模板),比如env.js?
我正在考虑尝试通过能够在 Web 应用程序的客户端或服务器端呈现相同的模板来查看可以获得什么好处,但我希望有人可能已经有一些经验,或者知道现有项目正在做这个。与一些更传统的模板引擎相比,我特别有兴趣了解我可能遇到的任何性能问题。
回顾一下:有没有人在服务器站点上使用过 jquery 模板?如果是这样,是否有任何性能问题或我可能遇到的其他问题?
env.js
是不必要的。
<plug shameless="true">
我正在规范和重新实现 JQuery 模板以允许它们独立于 DOM 使用。有关代码和演示,请参阅https://github.com/mikesamuel/jquery-jquery-tmpl-proposal 。该规范可在http://wiki.jqueryui.com/w/page/37898666/Template获得,它说:
以文本为中心,而不是依赖于 DOM。状态:完成。请参阅第 12 节的实现。foo${bar} 转换为与 function (data, options) { return "foo" + bar; 非常相似的东西。对 bar 取模
...
这将允许在服务器端 javascript 环境中使用此模板引擎,例如 node.js 或 java/rhino
我很想得到反馈,可以帮助您入门。
</plug>
编写服务器端代码来处理 jQuery 模板相当简单。
这是我创建的一些非常基本的 vb.net 代码,它将 jquery 模板字符串的结果返回到任何对象的数组。目前它只替换数据值
Public Shared Function RenderTemplate(template As String, list As Array) As String
Dim myRegexOptions As RegexOptions = RegexOptions.Multiline
Dim myRegex As New Regex(strRegex, myRegexOptions)
Dim splits = myRegex.Split(template)
Dim matches = myRegex.Matches(template)
Dim i As Integer = 0
Dim swap As Boolean = False
Dim str As New StringBuilder
For Each item In list
swap = False
For i = 0 To splits.Length - 1
If swap Then
str.Append(CallByName(item, splits(i), CallType.Get, Nothing))
Else
str.Append(splits(i))
End If
swap = Not swap
Next
Next
Return str.ToString
End Function
因此,如果我发送以下...
Dim strTargetString As String = "<p><a href='${Link}'>${Name}</a></p>"
Dim data As New Generic.List(Of TestClass)
data.Add(New TestClass With {.Link = "http://stackoverflow.com", .Name = "First Object"})
data.Add(New TestClass With {.Link = "http://stackexchange.com", .Name = "Second Object"})
Return Render(strTargetString, data.ToArray)
它会将其输出为字符串
<p><a href='http://stackoverflow.com'>First Object</a></p>
<p><a href='http://stackexchange.com'>Second Object</a></p>
这比在服务器上生成一个假的浏览器对象并运行整个 jQuery 库来替换一些标签要快得多。
我的一位从事分布式遗传编程项目的朋友使用 js 服务器端模板系统来管理在所有用户浏览器中产生的所有网络工作者。他的代码在这里:github。我不知道它会有多大帮助,但我知道它很容易实现并且做了一些了不起的事情。从他发现它的容易程度我会推荐一个 js 模板系统它。