的根本問題是_.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