2

如何为backbonejs的fetch方法设置jsonpCallback函数名?添加到问题是我也使用 requireJS 所以我试图不具有全局函数并遵循 AMD 模式。

我不能使用来自 jquery 的自动生成的方法名称的原因是我正在使用的 api 的开发人员出于缓存原因想要为回调方法设置一个静态名称。

示例代码

define([
    'jquery',
    'underscore',
    'backbone',
    'marionette',
    'paginator',
    'models/item'], function($, _, Backbone, Marionette, Paginator, modelItem) {
    'use strict';

        var PaginatedCollection = Paginator.requestPager.extend({ 
            model: modelItem,

            paginator_core: {
               jsonpCallback : 'callbackFunc',

                type: 'GET',
                cache: true,

                dataType: 'jsonp',

            },      
            callbackFunc : function(data) {
                console.log(data);
            }

        });

        return PaginatedCollection;

    });

错误信息

TypeError:callbackFunc 不是函数

4

2 回答 2

1

覆盖您的 fetch 以在请求中传递回调方法名称。

fetch: function(options) {
  options || (options = {});
  var data = (options.data || {});
  options.dataType = 'jsonp';
  options.jsonp = 'callbackFunc';

  return Backbone.Collection.prototype.fetch.call(this, options);
}
于 2013-04-11T01:00:35.657 回答
1

由于您想缓存结果(在浏览器中,也可能在服务器上),您还需要设置options.cacheparam.

参数jsonpCallback也不是jsonp

这是您的同步覆盖功能应如下所示:

sync: function (method, model, options) {
    options.timeout = 10000; // required, or the application won't pick up on 404 responses
    options.dataType = 'jsonp';
    options.jsonpCallback = 'callbackFunc';
    options.cache = 'true';
    return Backbone.sync(method, model, options);
}

注意:BackboneJS v1.0,未在 0.9 或更早版本中测试

于 2013-07-09T17:20:30.520 回答