3

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

1 に答える 1

0

私は同じ問題で立ち往生しています。次を使用して属性にアクセスできることがわかりました

render: function(){                                                                   
    this.model.get('albums').each(function(album){   
        album.fetch({
            success: function(fetchedAlbum) {
                console.log(fetchedAlbum.toJSON());
            }
        });
    });
});

これにより、フェッチされたアルバムがフェッチされた関係で印刷されます...

バックボーンリレーショナルを使用する主な目的はそのような面倒を避けることであるため、これを解決策とは見なしません。

解決策が見つかったらこれを更新します:D 実際の解決策

于 2013-09-27T15:39:46.150 に答える