Voilà, tout est dans le titre. Quand j'appelle .fetch() sur ma collection je me mange une bad request (400)
J'ai regardé les headers de la requête et le Accept vaut undefined ...
Je trouve pas grand chose sur google à part mettre le header manuellement, mais ce n'est pas nécessaire normalement.
Une idée ?
Lâche tes bouts de code !
T'es sûr que ça vient pas de ton code serveur ?
Ben si je vais récupérer l'URL dans un onglet j'ai bien mon bout de JSON qui apparaît, le content-type est correct.
Je vous montre le code, mais le problème c'est qu'il y a pas vraiment de code ... y a 3 lignes :
(function (GC) {
// Cette collection gère les ships de la map
GC.models = GC.models || {};
GC.models.MapCrowd = Backbone.Collection.extend({
model: GC.models.MapShip
, fetch_ships: function(zone_id){
this.url = '/crowd/' + zone_id;
this.fetch(
/*{
success: function () { alert('crowd fetch OK');},
error: function () { alert('crowd fetch error');}
}*/
);
}
// Pas besoin de comparaison entre les ships pour le moment
, comparator: false //
});
}(GC));
(function (GC,win) {
// On instancie la crowd et on lui dit de récupérer les ships de
// la zone de départ
var crowd = new GC.models.MapCrowd;
console.log('crowd',crowd);
crowd.fetch_ships(GC.config.init_zid);
}(GC,window));
J'ai testé jQuery 1.9.1 et 1.7.1, aucune différence ...
Je vais virer lodash et mettre underscorejs à la place pour voir si ça vient de là.
lodash/underscore même combat; erreur 400
Hmmm ça doit venir du serveur, j'vois pas d'autre solution
Bon ben j'ai mis les headers manuellement ... Il me semblait que Backbone ne géreait que du JSON et que par conséquent il mettait ce header tout seul comme un grand .. Tant pis, ça fonctionne.
Bon apparemment sur les navigateurs qui implémentent l'objet JSON en natif, ce dernier n'aime pas qu'on touche au prototype de Object
Du coup tout est revenu normalement.
Je comprends pas trop ce que tu as bricolé
mais si ça marche tant mieux
Je voulais modifier le prototype de Object pour pouvoir récupérer depuis un objet une fonction dont le
this
reste accroché à l'objet.
var a = {
do_something = function() {
this.do_another_thing();
}
};
var b = {
// [...]
};
b.do_something = a.superior('do_something');
avec le code précédent, appeler
b.do_something()
appelle en fait
a.do_something()
-- enfin, disons que
this
reste
a
. C'est utile pour garder
a
en variable privée et exposer
b
comme API. Du coup, j'utilise underscore (lo-Dash en fait) pour binder tout ça et ça ira bien
backbone bind automatiquement les events aux collections, models ect (génial pour un développeur JS, un peu moins avec CS car moins souple)
après tu parles peut être d'un code qui n'a rien à voir avec ton app backbone ^^
Oui oui c'est du code de base, mais je l'ai viré, tant que j'en ai pas besoin, et _.bind fera l'affaire.