我无法弄清楚为什么我们将Model.tojson()传递到此模板中:
app.TodoView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#item-template').html()),
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this; // enable chained calls
}
});
示例来自本教程。
this.template(this.model.toJSON())
是我的混乱部分。模板方法似乎没有参数吗?发生了什么?
下划线_.template
函数将模板字符串作为参数(以及选项为设置对象),并返回一个新的预编译模板函数,该函数以对象为参数。
此对象是模板中使用的数据:
// creates a template function
var templateFunc = _.template("<span><%= name %></span>");
// render the template using the passed data
templateFunc({ name: "Émile" }); // <span>Émile</span>
默认情况下,
template
将数据中的值放在本地 通过with
语句范围。但是,您可以指定一个variable
设置的可变名称。_.template("Using 'with': <%= data.answer %>", {variable: 'data'})({answer: 'no'});
model.toJSON()
返回模型的浅副本或 attributes
哈希。
达到上述示例的等效:
var model = new Backbone.Model({ name: "Émile" });
templateFunc(model.toJSON()); // <span>Émile</span>
对于v1.7之前的underscore.js,模板函数签名有些不同:
_.template(templateString, [data], [settings])
如果传递了数据对象,则没有返回函数,而是直接返回了渲染模板字符串。
_.template('This is <%= val %>.', { val: "deprecated" });
// This is deprecated.