Backbone を使用して Google カレンダーからカレンダー イベントを取得する際に問題が発生しました。
私が呼び出すcollection.fetch()
と、jsonに13個のオブジェクトがある場合、長さ1しか返されません。
コレクションでオーバーライドしているメソッドを確認したところ、parse:function(response)
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 カレンダー フィードを正常に解析したことがあるので、本当に単純なものが欠けているのではないかと心配しています。
Iconsole.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();