thisとthis question は既に読みましたが、役に立ちませんでした。私はこの方法で fetchRelated を呼び出しました:
initialize: function(){
Artist.fetchRelated(
'albums',
{success: this.render}
);
},
render: function(){
this.model.get('albums').each(function(album){
console.log(album);
console.log(album.toJSON());
console.log(album.get('title'));
});
$(this.el).html(this.template({
current_user: App.current_user.toJSON(),
artist: this.model.toJSON(),
albums: this.model.get('albums'),
}));
return this;
},
最初console.log(album)
はすべての属性を正しく含む有効なアルバム モデルを返しますが、toJSON 関数を使用した次の log の呼び出しはそうではありません。IDを返すだけです。そのため、次のログでアルバムのタイトルを取得しようとすると、undefined が返されます。
さらに、テンプレート呼び出しで toJSON() をアーティストに呼び出すことはできません。これは定義されていないためですが、アルバムを取得するために使用しただけです...
ここでの問題は、まだ慣れていないコールバック地獄にあると確信していますが、それを修正する方法の手がかりがありません。
編集1:
console.log(album) の応答は、コレクション内の各アルバムに対して次のようになります。
_changing: false
_events: Object
_isInitialized: true
_pending: false
_permitsUsed: 0
_previousAttributes: Object
_queue: Backbone.BlockingQueue
_relations: Array[2]
attributes: Object
artist: child
description: "asdasd"
id: 1
image: ""
release_year: 1950
resource_uri: "/albums/1"
songs: child
title: "asdasd"
changed: Object
cid: "c8"
collection: child
id: 1
__proto__: Surrogate
編集2:
バックボーンリレーショナルから提供された toJSON 関数を変更しようとしましたが、他のモデルがあり、この関数はオーバーライドなしで適切に機能するため、そのようなことを行うことで問題が解決する理由がわかりません。
_.clone(this.attributes)
正しい応答を返していたので、自分の toJSON 関数から返そうとしconsole.log(this.attributes)
ましたが、何らかの理由で同じを返します。
artist: Object
id: 1
songs: Array[0]
__proto__: Object
これが私の関係の様子です。
relations: [{
type: Backbone.HasMany,
key: 'songs',
relatedModel: SongModel,
collectionType: Songs,
reverseRelation:{
key: 'album'
}
}],