저는 백본을 처음 사용하기 때문에 객체의 JSON 배열을 백본 컬렉션에 전달할 때 상황에 대해 매우 혼란 스럽습니다.JSON 배열을 백본 컬렉션에 전달할 때 collection.length가 잘못되었습니다.
Google 드라이브에서 호스팅되는 스프레드 시트에서 일부 JSON을 가져옵니다. 내 컬렉션에서 사용하려는 실제 데이터가 깊이 중첩되어 있으므로 해당 데이터를 구문 분석합니다. 내 구문 분석 함수에서 원하는 배열의 길이를 기록하면 157이됩니다. 그런 다음 해당 배열을 백본 컬렉션으로 전달하고 컬렉션의 길이는 1 (올바르지 않음)입니다. 마치 foo.bar.length = 157이지만 'foo'에는 'bar'가 하나만 있으므로 foo.bar를 콜렉션에 전달할 때 foo.bar가 필요하고 foo.bar의 내용은 필요하지 않습니다! 매우 혼란. 아래
코드 ... 당신이 Google 스프레드 시트에 의해 반환 된 항목 중 하나를 덤프 경우
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
}
});
'resp.feed.entry'의 타입은 배열인지 확실합니까? 구문 분석 메소드'console.log (_. isArray (resp.feed.entry))'에서 로그 아웃하십시오! – nemesv