根本问题是_.template
:
默认情况下,模板with
通过语句将数据中的值放在本地范围内。
所以你在里面使用的所有东西都<%= ... %>
被认为是一个有效的 JavaScript 变量名。你first name
不是一个有效的 JavaScript 变量名,所以一切都崩溃了。
一个快速的解决方案是手动命名所有内容,以便您可以[]
用来获取您的属性,从而避免“JavaScript 变量名不能包含空格”问题:
var template = _.template("Hello <%= person['first name'] %>!");
console.log(template({ person: person.attributes}));
演示:http: //jsfiddle.net/ambiguous/5v7XQ/
如果您不介意升级下划线(一个好主意),那么您可以使用以下data
选项:
但是,您可以使用变量设置指定单个变量名称。这可以显着提高模板的渲染速度。
_.template("Using 'with': <%= data.answer %>", {answer: 'no'}, {variable: 'data'});
=> "Using 'with': no"
然后你可以这样做:
var template = _.template("Hello <%= person['first name'] %>!", null, { variable: 'person' });
console.log(template(person.attributes));
演示:http: //jsfiddle.net/ambiguous/NXhSN/
另一种选择是停止使用名称中包含空格的属性。如果您的所有模型属性名称也是有效的 JavaScript 变量名称,那么问题就会消失。