2013-08-23 55 views
0

我是Backbone.js的新手,並且在收集視圖中遇到了一些麻煩。 這裏就是我想要做的事:Backbone Collection查看每個

var customersCollection = new _App.Collections.Customers(); 
var customersView = new _App.Views.Customers({collection: customersCollection}); 
customersView.render(); 

而且這裏有一個觀點 - 我不明白爲什麼我不能遍歷集合:

_App.Views.Customers = Backbone.View.extend({ 
    render: function() { 
     console.log('Here is my collection'); 
     console.log(this.collection); 
     console.log('Now lets iterate over it...'); 
     _.each(this.collection, function(item) { 
      console.log(item); 
     }, this); 
     console.log('...done'); 
     return this; 
    } 
}); 

我在Chrome控制檯中看到什麼:

Here is my collection 
child {length: 0, models: Array[0], _byId: Object, constructor: function, url: "/admin/customers/latest.json"…} 
    _byId: Object 
    length: 5 
    models: Array[5] 
    __proto__: Surrogate 
Now lets iterate over it... 
...done 

所以我不明白爲什麼我可以看到一個集合,但不能每一個它。 感謝

//解決

我發現爲什麼這會發生。 完全錯過.fetch()是異步的,因此調用render()時,數據仍然不存在於集合中。 此代碼對我的作品了,所以我可以你不使用_.each適當地去與模板等

_App.Views.Customers = Backbone.View.extend({ 
    initialize: function() { 
     this.collection = new _App.Collections.Customers(); 
     this.collection.on('sync', this.render, this); 
     this.collection.fetch(); 
    }, 
    render: function() { 
     this.collection.each(function(item) { 
      console.log(item); 
     }); 
     return this; 
    } 
}); 

new _App.Views.Customers(); 

問候,尼古拉

回答

1

應該是:

_.each(this.collection.models, function(item) { 
    console.log(item); 
},this); 

或更好:

this.collection.each(function(item) { 
    console.log(item); 
}); 
+0

試圖this.collection.each(函數(項目){的console.log(項目);});但結果是完全一樣的 - 注意到將在console.log()裏面的迭代函數 –

+0

您的集合中是否有任何模型? – fbynite