下划线 JS 模板抛出引用错误变量未定义

Underscore JS template throwing Reference Error variable undefined

var resultTemplate = "" +
"    <ul class='searchList'>" +
"        <% _.each(paymentActions,function(paymentActivity){ %>" +
"            <li><span class='amount visible-phone'>-<%= paymentActivity.grossAmount %></span>" +
"            </li>" +
"        <% }); %>" +
"    </ul>";


var template = _.template(resultTemplate,{paymentActions : jsonData});

我得到的错误是(在代码片段的最后一行):-

Uncaught ReferenceError: paymentActions is not defined(…)

如果我在 var resultTemplate 行中手动放置一个 json 值而不是 paymentActions,它就可以正常工作。所以下面的代码执行得很好:-

var resultTemplate = "" +
"    <ul class='searchList'>" +
"        <% _.each([{grossAmount:100},{grossAmount:200}],function(paymentActivity){ %>" +
"            <li><span class='amount visible-phone'>-<%= paymentActivity.grossAmount %></span>" +
"            </li>" +
"        <% }); %>" +
"    </ul>";

谁能帮忙调试一下?

你可能最近升级了 Underscore,_.template() 函数的签名从 1.7.0 开始有 changed:

Underscore templates no longer accept an initial data object. _.template always returns a function now.

这是一个工作版本:

var jsonData = [{grossAmount:100},{grossAmount:200}];

var resultTemplate = "" +
"    <ul class='searchList'>" +
"        <% _.each(paymentActions,function(paymentActivity){ %>" +
"            <li><span class='amount visible-phone'>-<%= paymentActivity.grossAmount %></span>" +
"            </li>" +
"        <% }); %>" +
"    </ul>";

var template = _.template(resultTemplate)({paymentActions : jsonData});

console.log(template);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>

区别在于:

var template = _.template(resultTemplate)({paymentActions : jsonData});