いくつかの API データを繰り返し処理し、API のデータを Coffeescript オブジェクトにマッピングしています。私が困惑しているのは、これらの 2 つの console.log ステートメントの間でそのデータの一部だけが消える理由です。
items = (for item in @apiFeedPage.items
fi = new API.FeedItem(item, @apiFeedPage.instance_url)
console.log fi.comments.comments
window.API.itemHash[fi.id] = fi #save for later usage
fi )
console.log items[0].comments.comments
上記では、最初の console.log が期待どおりのコメントを出力します: fi.comments.comments は Comment オブジェクトの配列と同じです (Comments は FeedItem のプロパティです)が割り当てられていない - コメントなしで API 応答に対して Comment コンストラクターが実行されたかのように。
コンストラクタは次のようになります。
class API.FeedItem extends API.FeedComponent
# instance vars
comments: {}
constructor: (data, instance_url) ->
super(data, instance_url)
@parent = new API.User( data.parent )
@comments.comments = (new API.Comment(api_comment) for api_comment in data.comments.comments)
@comments.total = data.comments.total
@comments.nextPageUrl = data.comments.nextPageUrl
そして、コンストラクター内で @comments.comments が適切に割り当てられていることを確認しました。これは、最初の console.log ステートメントに期待されるオブジェクトがあるため、期待どおりです。上記のコードの最初のブロックは、太い矢印を使用して Ajax コールバック関数に配置されているため、これが「this」のコンテキストを失うことに関係しているという最初の疑いは当てはまらないようです。ある...
2 番目のステートメントで items[0].comments.comments が [] と等しい理由について何か考えはありますか?