我是 Backbone 的新手,当我将 JSON 数组(对象)传递给 Backbone 集合时,我对发生的事情感到非常困惑。
我正在从托管在 Google Drive 上的电子表格中获取一些 JSON。我正在解析这些数据,因为我想在我的集合中使用的实际数据是深度嵌套的。在我的解析函数中,如果我记录所需数组的长度,我会得到 157(这是正确的)。然后我将该数组传递给一个主干集合,我的集合的长度为 1(不正确)。好像 foo.bar.length = 157,但是 'foo' 中只有一个 'bar',所以当我将 foo.bar 传递到集合中时,它需要 foo.bar 而不是 foo.bar 的内容!很困惑。
下面的代码...
var table = new TableView();
TableItem = Backbone.Model.extend(),
TableItemCollection = Backbone.Collection.extend( {
model : TableItem,
url : 'https://spreadsheets.google.com/feeds/list/0AjbU8ta9j916dFdjSVg3YkNPUUJnWkZSWjBDWmZab3c/1/public/basic?alt=json-in-script',
sync : function( method, model, options ) {
var params = _.extend( {
type: 'GET',
dataType: 'jsonp',
url: this.url,
processData: false
}, options );
return $.ajax( params );
},
parse : function( resp, xhr ) {
console.log( resp.feed.entry.length ); // THIS LOGS 157
return resp.feed.entry;
}
} ),
TableView = Backbone.View.extend( {
initialize : function ( options ) {
this.collection = new TableItemCollection();
this.collection.on( 'reset', this.parseResponse, this );
this.collection.fetch( {
reset : true,
success : function ( model, response, options ) {
console.log( 'OK' ); // THIS LOGS 'OK'
},
error : function ( model, response, options ) {
console.log( 'ERROR' );
}
} );
},
parseResponse : function () {
console.log( this.collection.length ); // THIS LOGS 1
}
} );