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



我正在探索ASP。NET MVC,我想添加jQuery以使网站具有交互性。我使用了StringTemplate,移植到。Net,作为我的模板引擎来生成html并发送JSON。但是,当我查看页面时,我看不到它。经过调试,我意识到$是StringTemplate用来访问属性等的,jQuery也用它来操作DOM。天啊,我看过其他模板引擎,它们大多使用美元符号:(.

ASP的任何替代模板引擎。Net MVC?我想保留jQuery,因为MSFT宣布它将用于Visual Studio(2008?)

提前感谢:)

更新

请转到ASP中的答案。NET MVC视图引擎比较问题为ASP。NET MVC及其优缺点

更新2

最后,我将把JavaScript代码(包括JQuery)放在一个单独的脚本文件中,因此我不必担心$混合在模板文件中。

更新3

更改了标题以反映我需要解决的问题。毕竟,"Y中最好的X"是一个非常主观的问题。

您当然可以将js逻辑移动到.js文件中。但是,如果希望它与StringTemplate视图内联,则可以使用\$构造对其进行转义。

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

下面是一篇关于在MVC中使用StringTemplate作为视图引擎的好文章。

还有一个附带的OpenSource引擎,以及一些示例。

此外,如上所述,您可以修改您的Type Lexer。(使其成为$的替代字符)。

我强烈推荐Spark。我已经在jQuery中使用它一段时间了,到目前为止还没有遇到任何问题。

JQuery可以通过使用以下JQuery关键字来消除歧义:

jQuery(

而不是这个:

$(

我认为这是最好的做法。它消除了与另一个库发生冲突的可能性,并使代码更具可读性。

也许jQuery.noConflict会为您工作

看看mvccontrib项目。他们目前有4个不同的视图引擎,分别是brail、nhaml、nvelocity和xslt。

http://www.codeplex.com/MVCContrib

如果你想坚持使用StringTemplate(ST),请参阅ST维基上的这篇文章。您也可以通过编辑Antlr来完全改变行为。StringTemplate。Language \DefaultTemplateLexer.cs,并用您想要的内容替换"$"。

我真的很喜欢Django中的语法,所以我推荐NDjango:)

p>你尝试过$$或/$来转义字符串模板中的美元符号吗?我不确定ST的具体情况,但这是大多数模板引擎的工作方式。

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

JsonFx。NET有一个强大的客户端模板引擎和熟悉的ASP。NET风格的语法。整个框架是专门为配合jQuery和ASP而设计的。NET MVC。您可以从以下位置获得如何构建真实世界UI的示例:http://code.google.com/p/jsonfx-examples/

我一直在为ASP使用ANTLR StringTemplate。NET MVC项目。然而,我所做的是扩展StringTemplate语法(template.g),将"%"(aspx.template.g")识别为分隔符。如果您下载StringTemplate.net版本,您可以找到这些文件。我生成了相应的文件:AspxTemplateLexer.cs、AspxemplateParser.cs、AspxMemplateParserTokenTypes.cs和AspxTemplate ParserTokentTypes.txt。

此外,我还修改了StringTemplateLoader.cs,以识别Visual Studio可以识别的扩展名.aspx和.ascx。这样一来,我就不会拘泥于.st扩展,客户也不知道其中的区别。

无论如何,在重建StringTemplate之后,我有了我想要的行为。我喜欢StringTemplate的地方在于它不允许在模板中嵌入任何代码。它看起来像Spark一样,默认的ASP/MVC模板是代码允许的,这使得模板的可移植性较差。

我更喜欢用"<%"one_answers"%>"作为分隔符,但不幸的是,除非其他人做过,否则ANTLR语法似乎有些困难和脆弱。另一方面,StringTemplate有一个强大的支持社区和一种很好的分离方法,这就是MVC的重点。

您可以尝试jsRepeater。

您可能需要这个。NET模板引擎。如果您希望使用"$"字符,只需使用"$$"即可。请参阅以下代码:

{%carName = "Audi R8"/}
{%string str = "This is an $carName$"/}
$str$
$$str$$

输出将是

This is an Audi R8
$str$

如果我正确理解StringTemplate版本4,您可以在Template(或TemplateGroup)构造函数中定义自己的转义符。

发现Mustache是最愚蠢、最容易使用、最轻的全功能模板引擎。网络项目(Web和后端)

与配合良好。Net 3.5(这意味着它不需要动态类型和.Net 4.0就可以用于混合类型的模型,如Razor)。

我最喜欢的部分是能够在其中嵌套任意IDicts,并让引擎做正确的事情。这使得所有发动机的强制再沸步骤都非常简单:

var child = new {
    nested = "nested value"
};
var parent = new {
    SomeValue = "asdfadsf"
    , down = child
    , number = 123
};
var template = @"This is {{#down}}{{nested}}{{/down}}. Yeah to the power of {{number}}";
string output = Nustache.Core.Render.StringToString(template,parent);
// output:
// "This is nested value. Yeah to the power of 123"

Mustache最美妙的地方在于,相同的模板在纯JavaScript或其他20种左右支持的语言中完全相同。

最新更新