下划线模板无法按预期工作

时间:2013-08-01 12:20:20

标签: javascript jquery underscore.js

由于我在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 个答案:

答案 0 :(得分:1)

从“。”更改模板设置。到“[\ s \ S]”:

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

http://jsfiddle.net/zBTMw/4/ http://jsfiddle.net/zBTMw/5/与... {{3}}。 (有错误)

最新版本的underscore.js使用[\ s \ S]构造,这是我明白的地方。