2

我的骨干下划线模板不起作用。我从服务器得到一个变量返回,它有一个名字 month-total。模板引擎将其视为两个变量的算术运算。如何将其视为单个变量。谢谢

4

1 回答 1

1

下划线模板通过将模板转换为 JavaScript 函数来工作。<%= x %>诸如直接进入该功能的事情不受影响;然后该函数使用 JavaScriptwith使对象中的键表现得像局部变量。来自精美手册

默认情况下,模板with通过语句将数据中的值放在本地范围内。

您可以使用已source编译模板函数的属性来查看 JavaScript,如果我们使用类似 的简单模板执行此操作<%= a-b %>,您就会明白为什么它被视为减法:

// Reformatted for readability
function(obj) {
    var __t,
        __p   = '',
        __j   = Array.prototype.join,
        print = function() { __p += __j.call(arguments, ''); };
    with(obj || {}) {
        __p += '\n    ' + ((__t = ( a-b )) == null ? '' : __t ) + '\n';
    }
    return __p;
}

演示:http: //jsfiddle.net/ambiguous/6rPnB/

在那里您可以看到with原始a-b减法表达式。

现在您知道出了什么问题,您如何解决它?三种可能性立即出现:

  1. 修复服务器以返回更好的东西,"a_b": 6而不是"a-b": 6在 JSON 中。
  2. 在加载时或在将数据交给模板之前,将传入的 JSON 映射到更友好的内容。
  3. 使用(记录的)设置绕过with语句。variable

对于最后一个,您需要修改模板,使其看起来更像这样:

<%= data['a-b'] %>

用这样的东西编译模板:

var t = _.template(template_text, undefined, { variable: 'data' });

然后像往常一样调用编译后的模板函数。你不必使用data你的名字,你只需要确保模板和variable设置一致。

演示:http: //jsfiddle.net/ambiguous/eYn9m/

于 2013-06-06T23:14:17.667 回答