在Backbone.js中重写collection fetch()方法会导致对服务器的双重请求

在Backbone.js中重写collection fetch()方法会导致对服务器的双重请求,backbone.js,Backbone.js,我正在使用Backbone.js和Require.js开发一个应用程序。我有一个“Opportunities”主干集合,需要修改fetch方法,因为来自服务器的数据位于“results”对象中 我做了一些我发现的事情,在这一点上,一切看起来都很好 问题是,我注意到fetch方法向服务器请求数据两次,而不是预期的一次 我正在测试,现在我发现如果我删除这个代码:return Backbone.Collection.prototype.fetch.call(这个,选项)Backbone只向url请求了

我正在使用Backbone.js和Require.js开发一个应用程序。我有一个“Opportunities”主干集合,需要修改fetch方法,因为来自服务器的数据位于“results”对象中

我做了一些我发现的事情,在这一点上,一切看起来都很好

问题是,我注意到fetch方法向服务器请求数据两次,而不是预期的一次

我正在测试,现在我发现如果我删除这个代码:
return Backbone.Collection.prototype.fetch.call(这个,选项)
Backbone只向url请求了一次数据,显然是这段代码导致了问题,但我不知道原因

这是我的主干收藏

define([
    'backbone',
    'models/Opportunity'
], function(Backbone, Opportunity){

    var Opportunities = Backbone.Collection.extend({

        url: "/api/v1/opps/",

        model: Opportunity,

        // Need to have custom fetch because json data is coming inside a
        // "results" array inside the JSON.
        fetch : function(options) {
            // store reference for this collection
            var collection = this;
            $.ajax({
                type : 'GET',
                url : this.url,
                dataType : 'json',
                success : function(data) {
                    // set collection main data
                    collection.reset(data.results);
                }
            });

            // For some reason this is causing a double request
            // to the server
            return Backbone.Collection.prototype.fetch.call(this, options);
        }
    });

    return Opportunities;

});

有人知道发生此错误的原因吗?

它会获取两次,因为您使用jQuery直接获取它,调用模型自己的获取方法,该方法也会调用AJAX请求

如果要将
data.results
返回到集合(以及随后的模型),可以使用以下方法:

var Opportunities = Backbone.Collection.extend({
    url: "/api/v1/opps/",
    model: Opportunity,
    parse: function(data){
        return data.results;
    }
});

我已经尝试过这个解决方案,你是完全正确的,这个方法是我所需要的,成功了!