2012-12-02 55 views
3

我剛剛開始使用Backbone,並且對某個觀點感到困惑。如何正確使用Backbone.js集合來顯示列表

我有一個顯示文檔列表的頁面。

單擊列表中的文檔打開完整的文檔進行編輯。

根據我的理解,在Backbone中建立此列表的正確方法是作爲文檔模型的集合。

var DocList = Backbone.Collection.extend({ 
    model: document 
}); 

但是文檔模型會很大,有很多屬性。該列表不需要顯示所有這些信息。

我想知道,如果它是最好有類似下面的...

var ShortDoc = Backbone.Model.extend({}); 
var shortDoc = new Doc({ 
    id: id, 
    title: docTitle 
}); 
var DocList = Backbone.Collection.extend({ 
    model: shortDoc 
}); 

...其中shortDoc只包含必要的用於生成列表的目的性。

或者最好是整體使用文檔模型的集合?

感謝(提前)對你的幫助

回答

4

請記住,你可以寫多Backbone.View S爲同一型號。雖然您可能有一個顯示整個文檔的DetailView,但您也可以自由創建ItemView以在列表視圖中展示每個文檔的重要部分。當你的DetailView將包括廚房水槽,該ItemView可以限於呈現出標題關:

var MyItemView = Backbone.View.extend({ 
    tagName: 'li', 
    render: function() { 
    this.$el.html('<h3>' + this.model.get('title') + '</h3>'); 
    return this; 
    } 
}); 

最後,如果它是數據你是關心的體積:許多主幹應用選擇保留應用程序中使用的每種類型模型的集合。他們的狀態需要維持在某個地方;爲什麼不在一個很好的,有組織的清單?應用程序加載時,不需要引導每個模型屬性。您可以選擇加載標題(或任何您需要呈現初始列表的內容),並延遲提取模型,直到用戶請求任何詳細信息。

0

問題標題(類,實例和數據表示)有3種不同的概念。

你的定義應該是這樣的:

var Doc = Backbone.Model.extend({}); 
var DocList = Backbone.Collection.extend({ 
    url: '/docs', 
    model: Doc 
}); 

如果沒有缺省值再有就是在這個階段執行的任何數據。然後,你開始填充配車型的集合,可以有自己的完整的數據集(或只是一些它),或者通過創建它們的客戶端:

var myDocList = new DocList(); 
myDocList.create({title: 'The first doc'}); 
/* no need for an id here if you're using centralized persistence, because 
"create" calls "save" witch in turn does an http post to your server which 
should return a JSON representation of your model including its id (Backbone 
will include it in your model). */ 

或讀取這些服務器端:

var myDocList = new DocList(); 
myDocList.fetch(); 
/* Backbone will do an http get at DocList.url and create Doc instances with the 
    JSON array it should receive from your server*/ 

至於docList的表示,如果它是長或複雜的HTML,您應該將您的項目附加到新創建的元素,然後將此元素附加到您的文檔中,它可能比重繪每個元素快10倍左右項目。

相關問題