【问题标题】:Using Underscore.js with ASP.NET在 ASP.NET 中使用 Underscore.js
【发布时间】:2012-04-01 06:25:05
【问题描述】:

我一直在比较不同的 JavaScript 模板引擎,看看哪一个在处理大量数据时能提供最佳性能。我遇到的一个是Underscore.js。但是,我无法让任何示例正常工作。我的模板如下所示:

<% _.each(projects(), function(project) { %>
   <tr>
      <td><%= project.code %></td>
      <td><%= project.request %></td>
      <td><%= project.stage %></td>
      <td><%= project.type %></td>
      <td><%= project.launch %></td>
   </tr>
<% }) %>

但是,当我运行该页面时,我得到一个服务器端 ASP.NET 异常,因为它试图编译 &lt;% ... %&gt; 标记中的文本:

Compiler Error Message: CS1026: ) expected
Line 826:                     <% _.each(projects(), function(project) { %>

我无法找到转义这些标签的方法,也无法找到将 Underscore 配置为使用不同语法的方法。是否有解决方法,或者 Underscore 和 ASP.NET 只是相互不兼容?

【问题讨论】:

    标签: javascript asp.net underscore.js


    【解决方案1】:

    与 JSP 相同的问题,所以我们这样做:

    _.templateSettings = {interpolate : /\{\{(.+?)\}\}/g,      // print value: {{ value_name }}
                          evaluate    : /\{%([\s\S]+?)%\}/g,   // excute code: {% code_to_execute %}
                          escape      : /\{%-([\s\S]+?)%\}/g}; // excape HTML: {%- <script> %} prints &lt;script&gt;
    

    这将允许您使用标签输出的所有不同版本:插值、求值和转义。

    【讨论】:

    • 谢谢!这段代码帮了我很多..我让它工作了,但由于某种原因,现在页面加载时会有 10-15 秒的延迟..不确定发生了什么,但实际的绑定并没有明显快于jQuery.tmpl,所以我可能会回去使用它。
    • 是的,我不认为它那么快,但由于我们的站点使用 Backbone 并且已经安装了 Underscore,所以不妨使用它。当然我们也有 jQuery...
    • 啊,当我在本地复制underscore-min.js 文件时,延迟消失了,我猜它是在一个非常慢的服务器上。实际上,使用较小的数据集似乎要快一些,而对于较大的数据集则大致相同。我可能最终会保留它。
    • @MikeChristensen 是的,一点也不差。在我的情况下,即使它的缓慢也可以通过它始终可用而无需加载任何额外的事实来抵消。
    【解决方案2】:

    &lt;% 是 asp.net 使用的标签。因此,当页面被解析时,它会尝试解释这些,但 asp.net 不理解语法,因为它需要 C# 代码,而不是 javascript。

    您可以将 templateSettings 中的插值符号更改为{ }{{ }}之类的东西

    _.templateSettings = {
      interpolate : /\{\{(.+?)\}\}/g
      evaluate : /\{(.+?)\}/g; 
    };
    
    var template = _.template("Hello {{ name }}!");
    template({name : "Mustache"});
    => "Hello Mustache!"
    

    Documentation


    仅供参考,这些是默认设置:

    // By default, Underscore uses ERB-style template delimiters, change the
    // following template settings to use alternative delimiters.
    _.templateSettings = {
      evaluate    : /<%([\s\S]+?)%>/g,
      interpolate : /<%=([\s\S]+?)%>/g,
      escape      : /<%-([\s\S]+?)%>/g
    };
    

    【讨论】:

    • 这只修复了其中一个标签集。
    • 太棒了!这绝对是有帮助的。 +1
    【解决方案3】:

    替换:

    <% }) %>
    

    更改为:

    <% }); %>
    

    祝你好运!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2017-04-14
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多