2013-04-10 3 views
2

Comment définir le nom de la fonction jsonpCallback pour la méthode fetch de backbonejs? Pour ajouter au problème, j'utilise aussi requireJS, donc j'essaie de ne pas avoir de fonction globale et de suivre le modèle AMD.comment paramétrer la méthode de call backbone fetch

La raison pour laquelle je ne peux pas utiliser le nom de méthode généré automatiquement par jquery est le développeur de l'API J'utilise want pour avoir un nom statique de la méthode de rappel pour des raisons de mise en cache.

Exemple de code

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; 

    }); 

Message d'erreur

TypeError: callbackFunc n'est pas une fonction

+0

Pouvez-vous nous montrer votre code? Le support de Jsonp fait-il partie de Backbone ou d'une autre bibliothèque que vous utilisez? –

+0

[WhatHaveYouTried.com] (http://mattgemmell.com/2008/12/08/what-have-you-tried/)? –

+0

Ajout d'un exemple de code. Juste montrant la partie avec laquelle j'ai des problèmes. –

Répondre

1

passer outre votre exploration pour passer le nom de la méthode de rappel dans la demande.

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

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

Puisque vous voulez mettre en cache les résultats (dans le navigateur, et peut-être sur le serveur ainsi), vous devez également définir options.cache param.

De plus, le PARAM est jsonpCallback pas jsonp

Voici ce que votre synchronisation fonction sur-ride devrait ressembler à:

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: backbone.js v1.0, non testé dans 0,9 ou plus tôt

Questions connexes