gpt4 book ai didi

Backbone.js 仅创建第一个模型,然后在使用 Google 日历解析时将其余模型返回为未定义

转载 作者:行者123 更新时间:2023-12-02 21:51:29 25 4
gpt4 key购买 nike

使用 Backbone 从 Google 日历提取日历事件时遇到一些问题。

当我调用collection.fetch()时,当json中有13个对象时,我只得到返回的长度1。

我查看了在 Collection 中重写的 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 日历提要,所以我担心我错过了一些非常简单的东西。

如果我 console.log response.feed 将返回以下内容:

Screenshot of console dump

这是完整的类(class):

/**
* 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();

最佳答案

显然,Google 日历为其条目提供了一个封装在对象 1 中的 ID:

"id":{
"$t":"http://www.google.com/calendar/feeds/..."
}

Backbone 似乎不喜欢哪个。很多。

一个简单的解决方案是覆盖解析方法中的 id:

parse: function(response) {
var entries=[];

_.each(response.feed.entry, function(entry,ix) {
entry.id=entry.id.$t;
entries.push(entry);
});

return entries;
}

还有一把 fiddle http://jsfiddle.net/bqzkT/

1 检查 https://developers.google.com/gdata/docs/json了解 Google 如何将其 XML 数据转换为 JSON。

<小时/>

编辑:问题来自于通过直接 XML 到 JSON 转换(通过 alt=json-in-script 参数请求)包装返回数据的方式对象中的属性。将此参数更改为 alt=jsonc 会产生更简单的 JSON 表示形式。比较 jsonc outputjson-in-script equivalent .

参见https://developers.google.com/youtube/2.0/developers_guide_jsonc#Comparing_JSON_and_JSONC了解更多信息

关于Backbone.js 仅创建第一个模型,然后在使用 Google 日历解析时将其余模型返回为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com