JQuery的$与ASP.Net MVC中的StringTemplate.Net冲突了。

17
我正在探索ASP.NET MVC,并希望添加jQuery以使网站更具交互性。我使用了StringTemplate,移植到了.Net,作为我的模板引擎来生成html并发送JSON。然而,当我查看页面时,我无法看到它。调试后,我意识到$被StringTemplate用于访问属性等,而jQuery也用它来操作DOM。唉,我查看了其他模板引擎,大多数都使用美元符号:(。
有没有适用于ASP.Net MVC的替代模板引擎?我想保留jQuery,因为MSFT宣布将在Visual Studio(2008?)中使用它。
提前感谢:)
更新
请参阅ASP.NET MVC View Engine Comparison问题中的答案,了解适用于ASP.NET MVC的模板引擎的全面列表及其优缺点
更新2
最终我将JavaScript代码(包括JQuery)放在一个单独的脚本文件中,因此我不必担心在模板文件中混杂的$。
更新3
更改标题以反映我需要解决的问题。毕竟,“The Best X in Y”是非常主观的问题。

我听说过StringTemplate很棒,如果你能按照下面建议的方式更改ANTLR限定符并让它正常工作,那将会非常有趣... - Xian
“$” 的分隔符有什么更好的选择吗?可以使用“<$ ... $>”吗? - OnesimusUnbound
1
https://dev59.com/i3M_5IYBdhLWcg3wQQ3w - Mauricio Scheffer
14个回答

13

你当然可以将你的js逻辑移至.js文件中,但如果你想与StringTemplate视图保持内联,则可以使用\$结构进行转义。

此外,如果你想避免转义语法,可以简单地使用jQuery("selector")而不是$("selector")结构。

这是一篇关于在MVC中使用StringTemplate作为视图引擎的好文章:using StringTemplate as a View Engine in MVC

还有一个相应的开源引擎以及一些示例

如上所述,你也可以修改Type Lexer (将其作为$的替代字符)。


3
无论如何,使用jQuery而不是$符号是一个好习惯,因为prototype和ms ajax库都会劫持$符号,你需要明确知道什么是jQuery以及什么不是很好。 - DevelopingChris

10

我强烈推荐使用Spark。我已经和jQuery一起使用了一段时间,至今没有遇到任何问题。


2
Spark不会与jQuery冲突,因为$仅在{expression}的直接前面被识别。没有以"${"开头的有效的jQuery语句。 - loudej
Spark看起来非常有前途。我似乎很喜欢它。 - OnesimusUnbound
最近我一直在使用Spark,目前为止它的表现非常出色,强烈推荐。 - Dave Thieben

7

使用jQuery关键字可以消除JQuery的歧义,如下所示:

jQuery(

改为这样:

$(

我认为这是最佳实践。它消除了与其他库冲突的可能性,并使代码更易读。

6

2
我认为这个选项不适用于StringTemplate。Stringtemplate不是JavaScript库。当使用另一个JavaScript库并且该库使用$时,会使用noConflict()。 - OnesimusUnbound
2
为什么不使用“jQuery”代替“$”? - ANaimi
1
我一直都想要那个美元符号“$”:)。不管怎样,你说得对ANaimi:)。我猜我可以放弃使用美元符号了。 - OnesimusUnbound

3

我非常喜欢Django的语法,所以我推荐使用NDjango :)


3

3

如果您想继续使用StringTemplate (ST),请参考ST wiki中的这篇文章。您还可以通过编辑Antlr.StringTemplate.Language\DefaultTemplateLexer.cs并将"$"替换为您想要的内容来完全改变行为方式。


1
我一直在为ASP.NET MVC项目使用ANTLR StringTemplate。然而,我的做法是扩展StringTemplate语法(template.g),以识别'%'(aspx.template.g)作为分隔符。如果你下载StringTemplate.net版本,就可以找到这些文件。我生成了相应的文件: AspxTemplateLexer.cs、AspxTemplateParser.cs、AspxTemplateParserTokenTypes.cs和AspxTemplateParserTokenTypes.txt。
此外,我还修改了StringTemplateLoader.cs,以识别Visual Studio所支持的扩展名.aspx和.ascx。这样我就不会被.st扩展名限制住了,客户也不会感受到差异。
总之,在重建StringTemplate后,我获得了想要的行为。我喜欢StringTemplate的一个原因是它不允许任何代码嵌入模板中。它看起来像是Spark,而默认的ASP/MVC模板是允许代码插入的,这使得模板不太可移植。
我更喜欢的是"<%"和"%>"作为分隔符,但不幸的是,ANTLR语法似乎有点难以修改,除非有人已经这样做了。另一方面,StringTemplate拥有一个伟大的支持社区,以及一个很好的分离方法——这是MVC的要点。

1

JsonFx.NET拥有一个强大的客户端模板引擎,具有熟悉的ASP.NET风格语法。整个框架专门设计为与jQuery和ASP.NET MVC良好配合使用。您可以从http://code.google.com/p/jsonfx-examples/获取构建真实世界UI的示例。


1

你尝试过使用$$或/$来转义字符串模板中的美元符号吗?我不确定ST具体如何,但大多数模板引擎都是这样工作的。

至于其他模板引擎,我在一个项目中使用nVelocity时非常喜欢它。


ST使用$来表示$,当引擎生成输出时,看起来很别扭。我可能会尝试使用nVelocity,看看它是否更合适。 :) - OnesimusUnbound
跟进。nVelocity存在一个问题$(http://www.mail-archive.com/castle-project-users@googlegroups.com/msg00098.html),但是nVelocity看起来更加简洁。 - OnesimusUnbound

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接