2014-07-16 45 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()。 –