骨干关系toJSON不会呈现所有属性

时间:2013-03-18 21:43:47

标签: javascript backbone.js asynchronous backbone-views backbone-relational

我已经阅读了thisthis问题,但它没有帮助。我用这种方式调用了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函数的日志则没有。它只返回id。因此,当我尝试在下一个日志中检索相册的标题时,它将返回undefined。

另外它告诉我我不能在模板调用中调用toJSON()给艺术家,因为它是未定义的,即使我只是用它来获取专辑......

我确定我的问题在于回调地狱我还不习惯,但我不知道如何修复它。

编辑1:

对于集合中的每个专辑,

console.log(专辑)响应都是这样的:

_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'
       }
   }],

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我发现你可以使用

访问这些属性
render: function(){                                                                   
    this.model.get('albums').each(function(album){   
        album.fetch({
            success: function(fetchedAlbum) {
                console.log(fetchedAlbum.toJSON());
            }
        });
    });
});

这将使用获取的关系打印已获取的相册...

我不认为这是一种解决方案,因为使用主干关系的主要目的是避免这种麻烦。

如果我找到解决方案,

将更新此信息:D真实解决方案