骨干投掷集合[方法]功能错误

时间:2013-01-28 13:00:05

标签: ajax backbone.js collections sync fetch

我一直在玩Backbone,我正在尝试学习它是如何工作的,所以我可以使用骨干创建phonegap应用程序。 0.9.9版本运行良好,升级到0.9.10后返回:

TypeError: collection[method] is not a function

   collection[method](resp, options);

backbone-0.9.10.js (line 821)

似乎问题与以下部分有关:

var params = _.extend({
    'method': 'GET',
    'url': this.url,
    'cache': true,
    'dataType': 'json',
    'processData': true
}, options);

console.log(params);

return $.ajax(params);

我无法找出问题所在。

使用0.9.9的工作版

http://92.245.6.92/backbone.peoples/index.html

使用0.9.10

升级而不能正常运行的版本
http://92.245.6.92/backbone.peoples/index2.html

请问我的代码是否存在重大错误或发生了什么事情,请您帮忙。 0.9.10是1.0的候选版本,所以我希望这不适用于任何新版本。

感谢。

1 个答案:

答案 0 :(得分:3)

抓取success回调签名已从0.9.9更改为0.9.10。回调签名现在是

function(collection, resp, options) { ...

在您的应用中,您已覆盖Collection.sync,并使用(app.js:35)执行回调:

options.success = function(data, textStatus, jqXHR) {
    model.parse(data);
    if(success)
        success(data, textStatus, jqXHR);
};

这会导致Backbone尝试在reset对象上调用方法data,这是一个vanilla javascript数组并且没有这样的方法。 要遵守新API,您需要使用以下命令进行调用:

var collection = this;
options.success = function(data, textStatus, jqXHR) {
    model.parse(data);
    if(success)
        success(collection , data, options);
};