Javascript 推送模板数据
我有一个主干视图,看起来像:Javascript 推送模板数据,javascript,jquery,templates,backbone.js,underscore.js,Javascript,Jquery,Templates,Backbone.js,Underscore.js,我有一个主干视图,看起来像: var BooksView = Backbone.View.extend({ initialize: function() { this.render(); }, render: function() { this.model.fetch({ success : function(model, resp, opt) { var data = { model, navigationText: this.navText }
var BooksView = Backbone.View.extend({
initialize: function() {
this.render();
},
render: function() {
this.model.fetch({
success : function(model, resp, opt) {
var data = { model, navigationText: this.navText };
this.$el.append ( JST['templates/' + "book"] ( data.toJSON() ) );
}.bind(this)
});
}
});
基本上,我试图用模型数据传递模板数据,以及其他非模型数据的数据。现在,我可以做到:
this.$el.append ( JST['templates/' + "book"] ( model.toJSON() ) );
它将发送模型数据。但例如,我有一个变量(navigationText),我也想传递给模板,但它永远不应该是model.set
使用当前代码,我得到错误:uncaughtsyntaxerror:Unexpected token,
,因为它不是有效的对象?这不是JavaScript:
var data = { model, navigationText: this.navText };
对象文本是一个逗号分隔的键:值
s列表,当您执行上述操作时,JavaScript不会向对象添加导航文本:this.navText
。过一会儿你说:
data.toJSON()
因此,您可能希望在模型上调用toJSON
,然后将导航文本
键添加到结果中:
var data = model.toJSON();
data.navigationText = this.navText;
然后将数据
交给模板函数:
JST['templates/book'](data)
您还可以重新构造模板,使模型数据和额外的navigationText
保持分离,例如:
<%= model.id %>
<%= navigationText %>
这里最大的优点是,您可以避免模型属性与您想要放入模板中的任何额外内容之间可能存在的重叠。当我使用:model:model.toJSON()
时,我必须访问模板中的变量,如:model.model.variable
,有没有办法不这样做?是否有什么东西取代了您的toJSON
实现?你所看到的不是标准的骨干行为。我想您可以使用model.toJSON().model
或类似的技巧,如果需要的话。我不知道JST,但在下划线模板中,不需要使用.toJSON()。您只需从模板中调用model.get()。@LaurensKling:JST
应该是模板的预编译版本,它们可以是下划线、把手或。。。您可以将整个模型传递给模板,但通过调用toJSON
克隆数据是一种推荐的最佳做法,有助于防止模板意外更改数据。
<%= id %>
<%= navigationText %>
JST['templates/book']({
model: model.toJSON(),
navigationText: this.navText
})