【问题标题】:JQuery's $ is in conflict with that of StringTemplate.Net in ASP.Net MVCJQuery 的 $ 与 ASP.Net MVC 中 StringTemplate.Net 的 $ 冲突
【发布时间】:2010-09-15 10:49:24
【问题描述】:

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

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

在此先感谢 :)

更新

请转至ASP.NET MVC View Engine Comparison 问题中的the answer,获取 ASP.NET MVC 模板引擎的完整列表及其优缺点

更新 2

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

更新 3

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

【问题讨论】:

  • 我听说过关于 StringTemplate 的好消息,看看您是否可以按照下面的建议更改 ANTLR 分隔符来让它工作起来会很有趣...
  • “$”的更好分隔符是什么?会不会是''?

标签: asp.net asp.net-mvc templates stringtemplate


【解决方案1】:

也许jQuery.noConflict 对你有用

【讨论】:

  • 我认为这个选项不适用于StringTemplate。 Stringtemplate 不是 JavaScript 库。当使用另一个 JavaScript 库并且该库使用 $
  • 为什么不用“jQuery”而不是“$”
  • 我一直想要'$' :)。无论如何,你有一点 ANaimi :)。我想我可以放开'$'
【解决方案2】:

您是否尝试过 $$ 或 /$ 来转义字符串模板中的美元符号?我不确定 ST,但大多数模板引擎都是这样工作的。

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

【讨论】:

【解决方案3】:

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

http://www.codeplex.com/MVCContrib

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • Spark 不会与 jQuery 发生冲突,因为 $ 只能直接在 {expression} 前面被识别。没有以“${”开头的有效 jQuery 语句。
    • Spark 看起来很有前途。我似乎喜欢它。
    • 我最近一直在使用 Spark,到目前为止它运行良好。强烈推荐。
    【解决方案5】:

    如果您想坚持使用 ST wiki 中的 StringTemplate (ST) see this article。您也可以通过编辑 Antlr.StringTemplate.Language\DefaultTemplateLexer.cs 并用您想要的替换“$”来完全改变行为。

    【讨论】:

      【解决方案6】:

      你可以试试jsRepeater

      【讨论】:

        【解决方案7】:

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

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

        这是一篇关于using StringTemplate as a View Engine in MVC 的好文章。

        还有一个随行的OpenSource engine, along with some samples

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

        【讨论】:

        • 使用 jQuery 代替 $ 无论如何都是一个好习惯,因为原型和 ms ajax 库无论如何都会劫持 $,你想明确地知道什么是 jQuery,什么不是那么好。
        【解决方案8】:

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

        jQuery(
        

        而不是这个:

        $(
        

        我认为这是一种最佳做法。它消除了与其他库发生冲突的任何可能性,并使代码更具可读性。

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            JsonFx.NET 具有功能强大的客户端模板引擎和熟悉的 ASP.NET 样式语法。整个框架专为与 jQuery 和 ASP.NET MVC 一起工作而设计。您可以从http://code.google.com/p/jsonfx-examples/

            获取有关如何构建真实 UI 的示例

            【讨论】:

              【解决方案11】:

              我一直在为 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 的地方在于它不允许在模板中嵌入任何代码。看起来像默认的 ASP/MVC 模板的 Spark 是代码许可的,这使得模板的可移植性降低。

              我更喜欢将“”作为分隔符,但不幸的是,除非有人这样​​做,否则 ANTLR 语法似乎有些难以更改且很脆弱。另一方面,StringTemplate 拥有强大的支持社区和出色的分离方法——这就是 MVC 的重点。

              【讨论】:

                【解决方案12】:

                您可能需要这个.NET Template Engine。如果您想使用 '$' 字符,只需使用 '$$'。请看下面的代码:

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

                输出将是

                This is an Audi R8
                $str$
                

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

                    发现 Mustache 是适用于 .Net 项目(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 种左右受支持的语言中的工作方式完全相同。

                    【讨论】:

                    • 我有使用它的经验,但我没有看到任何本地化内容的选项。在我的 test.aspx 模板页面上使用全局资源将解析为“”。
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-04-17
                    • 1970-01-01
                    相关资源
                    最近更新 更多