9

backbone.js を使用して、postsList配列からデータを取得しようとすると、これを chrome console.log で取得しました

d {length: 0, models: Array[0], _byId: Object, _byCid: Object, constructor: function…}
  _byCid: Object
  _byId: Object
  length: 9
  models: Array[9]
  __proto__: f

使おうとするconsole.log(postsList.length)と0になるのですが、中には9機種入っています。それらの数を取得する方法がわかりません。

4

2 に答える 2

12

はい、これは奇妙な動作です:)

Chrome は、 を使用した直後にオブジェクトのプレビューを表示しますconsole.log。入力したときconsole.log(collection)は空でした (おそらく、サーバーからモデルをフェッチしました)。ただし、コンソールでオブジェクトを展開すると、Chrome は現時点での実際のオブジェクト パラメータを表示します。

コンソールでこれを試してください:

var object = {key1:{prop:true}};
console.log(object)
object.key2 = true;
console.log(object)

コレクションの長さを取得するには、次の方法を使用します。

collection.fetch({context:collection}).done(function() {
  console.log(this.length)
});

編集

No-no-no :) のthis.length代わりに使用しthis.lenghtます。

collection.fetch({context:collection}).done(function() {
    // equals to this.length
    console.log(this.size());
    // get all models from collection (array of Backbone.Models)
    console.log(this.models);
    // get all models from collection (like simple array of objects)
    console.log(this.toJSON());
    // get model with index 1
    console.log(this.at(1));
    // get model data with index 1
    console.log(this.at(1).toJSON());
    // get model with id `some-id`
    console.log(this.get('some-id'));
    // get models data where property `id_str` equals to `292724698935070722`
    console.log(this.where({id_str:'292724698935070722'}));
});

詳細については、http: //backbonejs.org/#Collectionを参照してください。

于 2013-01-25T19:51:09.387 に答える
3

{context: collection}渡されたオプションは次のとおりであるため、Vitaliysの回答は少し危険だと思います。

  • a) バックボーンのドキュメントには記載されていません
  • b) fetch が何らかの Ajax 呼び出しをトリガーするときに、jQuery で深く処理されます。

代わりに、フェッチされたコレクションの長さは、フェッチのコールバックで簡単に確認できます。次にsuccess-例をerror-示します。

someCollection.fetch({
    success: function(collection) { // the fetched collection!
        if (collection.length) {
            // not empty
        } else {
            // empty
        }
    }
});

http://backbonejs.org/#Collection-fetchを参照してください

于 2014-02-18T13:44:40.527 に答える