7

コレクションによってフェッチされたモデルを反復処理しようとしています。

次のコードがあります:

initialize: function() {
                this.collection = new UserCollection();
                this.collection.fetch();
                this.render();
            },

            renderCollection: function() {
                console.log("rendering collection");
                this.collection.each(function(index,model){
                    console.log("model"); 
                });
                console.log(this.collection);
            },

render: function() {
                this.template = _.template(template, {});
                this.$el.html(this.template);
                // some other stuff
                this.renderCollection();
}

および結果:

rendering collection

d {models: Array[0], length: 0, _byId: Object, constructor: function, model: function…}
_byId: Object
_idAttr: "id"
length: 4
models: Array[4]
0: d
_changing: false
_events: Object
_pending: false
_previousAttributes: Object
attributes: Object
created: "2013-02-13 09:22:42"
id: "1"
modified: "2013-02-13 09:22:42"
role: "admin"
username: "email@gmail.com"
__proto__: Object
changed: Object
cid: "c5"
collection: d
id: "1"
__proto__: e
1: d
2: d
3: d
length: 4
__proto__: Array[0]
__proto__: e
 user_list.js:25

したがって、fetchメソッドは機能しました-オブジェクトダンプでは、フェッチされた4つのレコードを見つけることができますが、コレクションの反復処理は機能しません...

4

2 に答える 2

20

eachコレクションで行うことはmodel、それ自体をとして与えますargument

これを試して:

this.collection.each(function(model){
  console.log(model); 
});

それはあなたにmodel現在の反復のためのを与えるはずです。

于 2013-02-13T13:01:04.110 に答える
8

提供した出力に基づくと、「モデル」が印刷されていないように見えます。.each()ブロックが実行されたときに、this.collectionまだ完全にフェッチされていない可能性があることが原因である可能性があります。これは、JavaScriptの非同期性によるものです。

初期化メソッドでこれを試してください。

initialize: function() {
    var me = this;
    this.collection = new UserCollection();
    // Listen to 'reset' events from collection, so when .fetch() is completed and all
    // ready to go, it'll trigger .render() automatically.
    this.listenTo(this.collection, 'reset', this.render);
    this.collection.fetch();
},

これを処理するもう1つの方法は、フェッチ時に成功ハンドラーを追加することですが、この場合、リセットイベントをリッスンするだけで十分だと思います。

お役に立てれば!

ところで、Cycloneが言うように、.eachのハンドラーは、インデックスのないモデルである必要があります。:)

于 2013-02-13T13:11:01.433 に答える