2013-02-26 45 views
1

我從Backbone.js的牽引對象,並且當我字符串化對象我看到字符串文字JavaScript數組 - 第0個元素未定義但字符串化顯示對象

'[{"Name":"Testname","Address":"Testaddress","id":"444444444444444"}]' 

然而,當我分配非串行化對象到一個變量,並嘗試訪問第0個元素,我得到未定義。我希望得到的對象

{"Name":"Testname","Address":"Testaddress","id":"444444444444444"} 

JavaScript是不是治療

[{"Name":"Testname","Address":"Testaddress","id":"444444444444444"}] 

爲對象的索引數組?

+0

你的對象有沒有機會成爲'Backbone.Collection'? – jevakallio 2013-02-26 21:51:00

+0

你的右邊@fecliff它可能是一個「類似數組」的對象 – BishopZ 2013-02-26 21:53:38

+0

是的,它是Backbone.Collection。既然它是數組而不是真實數組,我將如何處理? – goldfinger 2013-02-26 21:55:29

回答

1

要通過索引來訪問Backbone.Collection的元素,使用Collection#at方法:

var first = collection.at(0); 

或者,你可以使用Collection#first方法,這實際上是​​庫的一部分,但被代理到骨幹的集合句法糖:

var first = collection.first(); 

你看到的序列化JSON數組表示其原因是,按照慣例JSON.stringify尋找一種方法稱爲toJSON上的對象,你給它進行stringify,如果找到了,則會使用該方法的返回值。 Collection#toJSON的實現返回集合內部模型數組的一個克隆,因此JSON輸出是一個數組。

+0

謝謝。現在我將非常感謝指向我明顯錯過的概念 - 也就是爲什麼我沒有索引數組。是否需要.at()getter恭維backbone.js處理集合或更一般的東西? – goldfinger 2013-02-26 22:15:20

+0

@goldfinger,這是因爲'Backbone.Collection'不是一個數組,所以你不能像數組那樣對它進行索引。內部Backbone將集合的模型存儲在名爲'models'的數組屬性中,該屬性是可索引的,例如, 'collection.models [0]'。這正是'collection.at'所做的。請參閱:http://backbonejs.org/docs/backbone.html#section-93 – jevakallio 2013-02-26 22:18:19

0

剛試過

var arr = JSON.parse('[{"Name":"Testname","Address":"Testaddress","id":"444444444444444"}]'); 

console.log(arr[0]); // => object 

你所描述什麼應該工作。