下划线模板未按预期工作

3

由于我正在使用带有 Ruby 的下划线模板,我想要更改默认的 <% %> 标签,因为 Ruby 和下划线模板都使用这个标签。所以我设置了下划线模板来使用其他标签,如下:

<script>

    _.templateSettings = {
      interpolate: /\[\=(.+?)\]/g,
      evaluate: /\[(.+?)\]/g
    };

</script>

所以我的模板并不是那么复杂:
<script type="text/html" id='table_list_rows_template'>
    [
    _.each(items,function(obj,key){

    var median = obj.md.toFixed(4)
  ]
  <tr>
    <td>[= key + 1]</td>
    <td>[= obj.name]</td>
    <td>[= median]</td>
  </tr>

  [ }); ]

所以,当我尝试从模板渲染HTML时,像这样(tuples 是对象列表,我的表格具有 id table_list):
<script>

    $(document).ready(function(){
        var template = $("#table_list_rows_template").html();
        $("#table_list tbody").html(_.template(template,{items:tuples}));
    });

    </script>
      </script>

所以我遇到了以下错误:

Uncaught SyntaxError: Unexpected token )

并且应该在这一行:

$("#table_list tbody").html(_.template(template,{items:tuples}));

但我无法找出错误所在。我的代码有什么问题?

更新:

我尝试将[]更改为<? ?>,就像php样式一样,因为第一个提醒了JavaScript数组,所以我想这可能会引起问题。请参见以下内容:

_.templateSettings = {
      interpolate: /<\?\=(.+?)\?>/g,
      evaluate: /<\?(.+?)\?>/g
    };

<script type="text/html" id='table_list_rows_template'>

    <? 
            _.each(items,function(obj,key, list){
    ?>

  <tr id='response_[= obj.id]'>
    <td></td>
    <td><?= obj.name ?></td>
  </tr>

  <? }); ?>

  </script>

没有任何改变,依然是同样的错误。
1个回答

1

将模板设置从“.”更改为“[\s\S]”:

_.templateSettings = {
  interpolate: /\[\=([\s\S]+?)\]/g,
  evaluate: /\[([\s\S]+?)\]/g
};

http://jsfiddle.net/zBTMw/4/ 使用 \s\S
http://jsfiddle.net/zBTMw/5/ 使用 .(有错误)

underscore.js 的最新版本使用了 [\s\S] 构造,这是我得到灵感的地方。


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