的根本问题是_.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
option:
但是,你ç用变量设置指定单个变量名称。这可以显着提高模板能够呈现的速度。
_.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变量名,那么问题就会消失。
谢谢@mu。如果我的属性名称遵循它们建模的css属性(包括破折号),它会使事情变得更简单。所以现在我只需要决定哪些是较小的痛苦:在需要时用下划线替换下划线字符,或者用命名空间var来重写模板。嗯。非常感谢您的意见! – 2013-04-11 19:13:04