2011-12-21 3 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 

私は、このコードに2秒と言うのsetTimeoutメソッドを追加した場合、私は

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

私は(ない 'JSON.stringify'は必要ありません)actions.models.length'が参照ではなく値によって渡されますので、' 'console.log'の非同期性は、ここに答えはないと思います。 –

1

fetchのようなAjax関数を使用してモデルをロードしていますか?その場合、Ajax関数のコールバックが呼び出されるまで、ロードされているデータをカウントすることはできません。

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

ウェブサーバー経由でサーバーからプッシュされています。 – fancy

+1

同じ原則。 WebSocketは非ブロックです。どこかにコールバックがあり、そのコールバックが呼び出されるまで、ロードされているモデルを数えることはできません。 –

+0

websocketデータは親モデルに追加され、これらのイベントはその親のaddイベントにバインドされます。データが受信される前に追加イベントが発生しないと仮定しました。これが真でない場合、そのような状況でコールバックを構築するにはどうすればよいですか? – fancy

関連する問題