1

我正在使用 Backbone.js 和 Require.js 做一个应用程序。我有一个“机会”主干集合,我需要修改 fetch 方法,因为来自服务器的数据来自一个“结果”对象。

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

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

我正在测试,现在我发现如果我删除此代码:return Backbone.Collection.prototype.fetch.call(this, options);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;

});

有人知道原因是因为发生了这个错误吗?

4

1 回答 1

3

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

如果您想返回data.results您的收藏(以及随后的模型),您可以使用该parse方法,例如:

var Opportunities = Backbone.Collection.extend({
    url: "/api/v1/opps/",
    model: Opportunity,
    parse: function(data){
        return data.results;
    }
});
于 2013-08-20T22:13:43.693 回答