使用 Backbone 从 Google 日历中提取日历事件时遇到一些问题。
当我打电话collection.fetch()
时,当 json 中有 13 个对象时,我只返回 1 的长度。
我查看了parse:function(response)
我在 Collection 中重写的方法,它返回了所有 13 个对象。我查看了backbone.js 中的add 方法,问题似乎出现在第591 行:
models = _.isArray(models) ? models.slice() : [models];
当我用 console.log 换行来检查模型变量的状态时:
console.log(models);
models = _.isArray(models) ? models.slice() : [models];
console.log(models);
我得到以下结果:
[Object,Object,Object,Object,Object,Object,Object,Object,Object,Object,Object,Object,Object] backbone.js:590
[child,undefined × 12]
我不知道为什么它会在添加时失败。我通过更改parse:function(response)
集合中的方法以返回每个对象来检查每个模型,它工作正常。:
parse: function(response) {
return response.feed.entry[5];
}
我之前已经使用 Backbone.js 成功解析了 Google 日历提要,所以我担心我错过了一些非常简单的东西。
如果我console.log
response.feed
返回以下内容:
这是完整的课程:
/**
* Backbone
* @class
*/
var Gigs = Gigs || {};
Gigs.Backbone = {}
Gigs.Backbone.Model = Backbone.Model.extend();
Gigs.Backbone.Collection = Backbone.Collection.extend({
model: Gigs.Backbone.Model,
url: 'http://www.google.com/calendar/feeds/email@email.com/public/full?alt=json-in-script&orderby=starttime&callback=?',
sync: function(method, model, options) {
options.dataType = "jsonp";
return Backbone.sync(method, model, options);
},
parse: function(response) {
return response.feed.entry;
}
});
Gigs.Backbone.Controller = Backbone.View.extend({
initialize: function() {
var self = this;
this.collection = new Gigs.Backbone.Collection();
this.collection.on('reset', this.addElements, this);
this.collection.fetch();
},
addElements: function() {
log(this.collection);
}
});
var backbone = new Gigs.Backbone.Controller();