我已经读过这个和这个问题,但它没有帮助。我这样调用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函数,但我不明白为什么做这样的事情应该解决我的问题,因为我有其他模型和这个函数正常工作没有任何覆盖。
我试着从我自己的toJSON函数返回_.clone(this.attributes)
,因为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'
}
}],
我遇到了同样的问题,我发现你可以使用
访问属性render: function(){
this.model.get('albums').each(function(album){
album.fetch({
success: function(fetchedAlbum) {
console.log(fetchedAlbum.toJSON());
}
});
});
});
这将打印所获取的专辑与所获取的关系…
我不认为这是一个解决方案,因为使用骨干关系的主要目的是避免这样的麻烦。
将更新这个,如果我找到一个解决方案:D真正的解决方案