2012-01-19 9 views
0

コレクションを含むバックボーンモデルがあります。 私はconsole.log(this.model)行うコンソールからの出力ははオブジェクト表記でバックボーンコレクションにアクセスできません

 
d 
_changed: false 
_changing: false 
_escapedAttributes: Object 
_previousAttributes: Object 
attributes: Object 
cid: "c1" 
id: 63 
itemlist: d 
    _byCid: Object 
    _byId: Object 
    _onModelEvent: function() { [native code] } 
    _removeReference: function() { [native code] } 
    length: 5 
    models: Array[5] 
    __proto__: o 
url: "user/63" 
__proto__: o 

完璧です!今、私はthis.model.itemlist.each(render(item))を行うことができるようにitemlistコレクションを入手したいと思います。

しかし、これは、なぜ私は出力console.log(this.model.itemlist)しようとすると、私は空のコレクション

 
d 
_byCid: Object 
_byId: Object 
_callbacks: Object 
_onModelEvent: function() { [native code] } 
_removeReference: function() { [native code] } 
length: 0 
models: Array[0] 
parent: d 
__proto__: o 

を取得し、私はわからないんだけど、ときI出力モデルでは、私は、ネストされたコレクションを見ることができます。なぜ私はコレクションにアクセスできないのですか?または私はどのようにコレクションに着くことができます。

私は---------------更新-----------------

 
user.fetch({ 
    success: function(response){ 
       user.itemlist = new itemlistcollection(response.items) 
     } 
}); 

を経由して、ネストされたコレクションを作成します -

@Paulとして私が発見するのを助けます、fetch関数が完了する前にビューがトリガーされているので、私はfetchから出力するときコレクションを持っていますが、私はコレクションを利用できません。それは必要な場所です。

アクションは、私のルータで発生しているフェッチ、私はそれが既にこれをどのように他人を確認します(ない初期化されていない場合、オブジェクトを初期化する機能を作成しました。私のルータがこの

 
User.Router = Backbone.Router.extend ({ 
    routes: { 

     "user/new": "newUser", 
     "user/:id": "userView" 
     "":    "index" 
    }, 

    re_initialize: function(id){ 
      user.fetch({ 
       success: function(response){ 
       user.itemlist = new itemlistcollection(response.items) 
      } 
      }); 
     }, 

     userView: function(){ 

     console.log(user.itemlist); 
     new User.View(user); 
     } 
}); 

答えて

1
のように見えます fetchが非同期メソッドであるため、

これは、競合状態であるかもしれない。

あなたがthis.model.itemListを呼び出す前fetchは、サーバーからの要求を処理したのか?

をこのことを確認するために、確認しましたフェッチ方法でコンソールログメッセージを追加

user.fetch({ 
    success: function(response){ 
    user.itemlist = new itemlistcollection(response.items) 
    console.log(user.itemList) 
    } 
}); 

UPDATE

それがフェッチされた後にコレクションをレンダリングするためにビューが必要な場合は、お使いのモデルの「フェッチ」イベントをトリガし、持っていますビューは、このイベントにバインドしてコレクションをレンダリングします。ここで

は、問題がフェッチ内ではないですが、I出力として上記のステートメントは、私が得るとき、あなたが正しいポールかもしれ表示されますあなたのコード

user.fetch({ 
    success: function(response){ 
    user.itemList = new itemlistcollection(response.items); 
    user.trigger('fetched'); 
    } 
}); 

yourView = Backbone.View.extend({ 
    initialize: function() { 
    this.model.bind('fetched', this.renderList, this); 
    }, 

    renderList: function() { 
    this.model.itemList.each(render(item)); 
    } 
} 
+0

を更新することができる方法の例です。適切にリストします。問題は、ルートがフェッチが処理される前にビューをトリガーしているように見えることです。これを反映するように質問を更新します。 – pedalpete

+0

@pedalpete私の更新された答えを参照 – Paul

+0

ありがとう@ポール、私のバックボーンの全体的な構造のために、この質問への答えだけでなく、あなたの応答のリード私だけでなく、imporoved構造。乾杯。 – pedalpete

関連する問題