2011-12-21 60 views
1

與骨幹的工作,我看到其中的一些數據正在留空一個問題,所以我寫了這個試試,看看發生了什麼事情。我應該從哪裏開始,模型在那裏,但是......他們不是?

console.log('actions.models', this.model.actions.models) 
console.log('actions.models.length', this.model.actions.models.length) 
console.log('first actions.models', this.model.actions.models[0]) 

輸出

actions.models [ Action ] 
actions.models.length 0 
first actions.models undefined 

如果我添加的setTimeout的說2秒這段代碼,我得到

actions.models [ Action ] 
actions.models.length 1 
first actions.models Action 

我不明白這是怎麼發生的。我不知道該從哪裏開始尋找,甚至有什麼可以幫助您發佈,供大家觀看。

如果有人可以幫助我指出正確的方向我將不勝感激。非常感謝。

回答

0

不知道你正在嘗試做的,但無論如何..如果您轉儲對象到控制檯日誌,請注意這樣一個事實,因爲對象是通過引用傳遞,無論你從日誌中檢查這將是獲得無論結果是什麼。假設你想記錄一個對象的狀態,你應該嘗試在記錄時序列化它。例如console.log "mymodel: ", JSON.stringify(mymodel.attributes)

另請注意,要訪問主幹模型,通常使用name = mymodel.get('name')或集合item = mycollection.get('someid')

如果發佈一些測試代碼和你所要完成,我敢肯定有人有線索,將能夠幫助你。

+0

我不認爲'console.log'的異步性在這裏是答案,因爲'actions.models.length'將通過值傳遞而不是通過引用傳遞(不需要'JSON.stringify') 。 – 2011-12-21 18:30:58

1

你通過Ajax功能加載模型,如fetch?如果是這樣,在調用Ajax函數的回調之前,你不能指望被加載的數據,例如,

actions.fetch {success: -> console.log actions.models.length} 
+0

他們正在通過websockets從服務器推送。 – fancy 2011-12-21 18:31:17

+1

原理相同。 WebSockets是非阻塞的。有一個回調的地方,你不能指望正在加載的模型,直到該回調被調用。 – 2011-12-21 18:31:51

+0

websocket數據添加到父級模型,並且這些事件綁定到該父級上的添加事件。我認爲添加事件不會在數據收到之前觸發 - 如果不是這樣,我該如何在這種情況下構建回調? – fancy 2011-12-21 18:39:15