如何设置骨干fetch回调方法

时间:2013-04-10 22:43:39

标签: jquery backbone.js requirejs

如何为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不是函数

2 个答案:

答案 0 :(得分:1)

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

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

  return Backbone.Collection.prototype.fetch.call(this, options);
}

答案 1 :(得分:1)

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

此外,参数为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);
}

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