0

コレクションに対して fetch() を実行し、サーバーからいくつかのモデルを返すビューがあります。

ProductsView = Backbone.View.extend({

    initialize: function() {
        _.bindAll(this, 'render');
        this.collection = new ProductCollection();
        this.collection.fetch({data: {limit : this.options.limit}});

        console.log(this.collection);

        this.render();
    },
    render: function() {

        var template = _.template( $("#product-template").html(), this );
        $(this.el).html( template );
        return this;
    }
});

上記の console.log には、次のようなオブジェクトが表示されます。

products.view.js:13
d
_byCid: Object
_byId: Object
length: 7
models: Array[7]
__proto__: x

modelsありますがconsole.log(this.collection.models)[]モデル内には次のようなオブジェクトの配列が表示されます。

models: Array[7]
0: d
1: d
2: d
3: d
4: d
5: d
6: d

これらのそれぞれには、attributes返された値があります。

this.collection.models私が使用または使用しているときにモデルが表示されない理由もわかりget()ません。

どうもありがとう!

4

1 に答える 1

6

一般this.collection.fetch({data: {limit : this.options.limit}})に、 は非同期操作であるため、次の行で の正しい内容が出力されるとは限りませんcollection

代わりに、次のように、メソッドがパラメーターの一部として提供するコールバックsuccessを使用する (またはコレクションのイベントをリッスンする) 必要があります。errorfetchoptionschange

this.collection.fetch(
    { 
        data: { limit : this.options.limit },
        success : function(collection, rawresponse) { 
            // do something with the data, like calling render 
        }
    }
);

完全を期すために:

this.collection.on('change', function(){ // some handling of the data };
this.collection.fetch();

イベントベースの方法です。

于 2012-04-07T04:22:35.083 に答える