2015-06-01 109 views
1

我在Backbone JS中的集合的初始人口有一些問題。Backbone JS:獲取集合 - 使用JSON響應格式的問題

在開發myCollection沒有從服務器獲取數據,我只是通過它在這樣的:

app.myCollection.reset([ 
    { person: 'Sally'}, 
    { person: 'Peter'}, 
    { person: 'Paul'}, 
    { person: 'Wilma'} 
]); 

做一個console.log(app.myCollection);向我表明的收集是正確填充,因爲它是length爲4:

s {length: 4, models: Array[4], _byId: Object} 

現在我想從服務器獲取數據,響應看起來是這樣的:

[ 
    { 
     "person": "Sally" 
    }, 
    { 
     "person": "Peter" 
    }, 
    { 
     "person": "Paul" 
    }, 
    { 
     "person": "Wilma" 
    } 
] 

不幸的是,出現了問題,因爲length屬性現在爲0,但我可以在對象中查找數據。

s {length: 0, models: Array[0], _byId: Object} 

我不喜歡這樣寫道:

app.myCollection.fetch({reset: true}); 

對我來說,它看起來而非陣列內的每個對象只喜歡外數組被「映射」到模型。

我能做些什麼來防止這種情況發生?

編輯 正如評論中所建議的那樣,我在響應中包含了一個「id」屬性。現在,它看起來像這樣:

[ 
    { 
     "id": 1, 
     "person": "Sally" 
    }, 
    { 
     "id": 2, 
     "person": "Peter" 
    }, 
    { 
     "id": 3, 
     "person": "Paul" 
    }, 
    { 
     "id": 4, 
     "person": "Wilma" 
    } 
] 

不幸的是,事情仍然是不正確的,因爲收集現在看起來是這樣的:

s {length: 0, models: Array[0], _byId: Object} 
_byId: Object 
length: 4 
models: Array[4] 
__proto__: s 

所以你看,一個長度爲0,另外一個這可能是因爲我現在只是鏈接到一個json文件?

+1

在提取之前,在您的集合上將'idAttribute'設置爲'「person」'。要麼這樣做,要麼讓服務器響應響應數組中每個對象的唯一「ID」屬性。 – idbehold

+0

實際上,您需要將其設置在模型上,而不是集合中。另外,要確定你的「人」值是獨一無二的 –

+0

@idbehold謝謝,我只是包含了一個「id」屬性,因爲這看起來更清晰和安全,但收集仍然看起來很奇怪。我編輯了這個問題。 – Sven

回答

3

提取是異步的,所以也許當您登錄您的控制檯數據不會被提取?你在抓取時使用了成功回調函數嗎?

app.myCollection.fetch({reset: true},success: function() {console.log(app.myCollection);}); 
+0

多數民衆贊成它,現在它的工作!即使鏈接到json文件,我也沒有意識到它是異步的。但當然這是有道理的,因爲獲取會觸發AJAX請求。謝謝! – Sven

+0

我很高興它的工作! –