2014-07-16 101 views
-1

我有一个看起来像一个骨干视图:推上模板数据

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。

随着我当前的代码,我得到的错误:Uncaught SyntaxError: Unexpected token ,,因为它不是一个有效的对象?

回答

1

这不是JavaScript的:

var data = { model, navigationText: this.navText }; 

对象文本是key: value个逗号分隔的列表,当你做了以上的JavaScript不会增加navigationText: this.navText对象。过了一会儿,你说:

data.toJSON() 

所以大概要呼吁modeltoJSON,然后添加你的navigationText关键结果:

var data = model.toJSON(); 
data.navigationText = this.navText; 

然后用手data到模板功能:

JST['templates/book'](data) 

您还可以重构模板,以使模型数据和额外的navigationText都是kep牛逼分开,像:

<%= model.id %> 
<%= navigationText %> 

代替:

<%= id %> 
<%= navigationText %> 

然后,你可以说:

JST['templates/book']({ 
    model: model.toJSON(), 
    navigationText: this.navText 
}) 

这里最大的好处是,你会避免可能的模型之间的重叠属性和任何你想放在你的模板中的东西。

+0

当我使用:'模型:model.toJSON()',然后我要访问我的模板类的变量:'model.model.variable',有没有办法不这样做呢? – Muhambi

+0

是否有东西取代了你的'toJSON'实现?你看到的不是标准的主干行为。我想你可以使用'model.toJSON()。model'或类似的技巧,如果有必要的话。 –

+0

我不知道JST,但在Underscore模板中,没有必要使用.toJSON()。您可以在模板中调用model.get()。 –