8
votes

Erreur de synchronisation de la colonne vertébrale même après le code de réponse 200

Bonjour Backbone Ninjas,

C'est ma première fois en utilisant la colonne vertébrale - veuillez donc excuser mon "noob". Dans ma fonctionnalité (une partie d'une application plus grande), j'ai une vue dorsale VA, sauvegardée par un modèle MA (comme cela devrait être) et le côté serveur est au printemps MVC ayant des méthodes de contrôleur de ressort annotées avec @Requestbody et @Responsebody. J'ai Jackson fonctionne bien avec le printemps. P>

Maintenant, dans l'application, P>

this.model.unset("abc",{ silent: true });
this.model.set( { abc: {id : "2",xyz:{ ... //more code } ); 


2 commentaires

Je ne sais pas si cela causerait votre problème, mais j'ai eu des problèmes auparavant avec le fait que backbone.model.save () nécessite réellement de mettre vos données de sauvegarde comme premier argument, comme si : `Model.save (modèle.tojson (), {Succès: fonction () {}, Erreur: ions Funct () {}); J'ai rencontré des problèmes dans le passé où j'ai eu des erreurs étranges simplement parce que j'ai oublié que vous devez explicitement transmettre les données que vous souhaitez enregistrer / poster. Pourrait donner cela un essai.


Merci pour votre temps. Mais ça n'a pas aidé. Maintenant, je reçois cela dans Firebug lorsque la réponse retourne: TypeError: A est indéfini ... Fonction BI (A, B, D) {var e = b.dir, f = d && b.dir === "Parentnode" , g = u ++; ...


4 Réponses :


9
votes

backbone.model.save () attend la réponse du serveur pour être un hachage mis à jour des valeurs du modèle. Si votre réponse est du type {"msg": "succès"} , la colonne vertébrale peut échouer à la synchronisation avec votre modèle. Fondamentalement, il interprète votre réponse HTTP 200 JSON en tant qu'attributs du modèle et essaie de synchroniser le modèle en conséquence.

Vous pouvez essayer d'être 1) Rendre votre chemin de contrôle de ressort Renvoie une réponse du modèle JSON-ified, 2) Renvoyer une plaine 200 avec un corps de réponse vide ou 3) Écrivez une personnalisation Paysez méthode qui recherchent des réponses avec le {" msg ":" succès "} format et répond différemment. .


1 commentaires

Un corps de réponse vide appellera toujours le gestionnaire d'erreur, une réponse de '{}' ne sera pas cependant



1
votes

Merci pour votre temps. J'étais enfin capable de contourner le problème en utilisant $ .AJAX pour faire la demande de vente, contourner ainsi toute la backbone synchronisation. Mon gestionnaire de succès dans le rappel Ajax gère la réponse et il n'y a plus d'erreurs de synchronisation (car elle n'est pas appelée de toute façon) :)


1 commentaires

Aucun problème. Je ne suis pas sûr que la question de la question en appelant directement $ .ajax est la meilleure solution, mais tout ce qui fonctionne pour vous. Vous pouvez également consulter ce fil qui répond au Question de la manière dont le serveur doit répondre à Model.Save () .



0
votes

Je vais partager mon expérience avec le même problème; modèle de base personnalisé et appeler modèle.Save et aucun événement de réussite tiré.

Mon problème était avec une fonction définie personnalisée dans le modèle de base qui n'aurait pas renvoyé "ceci".

Si vous apercevé le code source de la colonne vertébrale. Enregistrer Vous trouverez ce snippet: xxx

le! Model.set (Serverattrs, options) a échoué dans mon cas et la fonction de sauvegarde renvoyée false avant de déclencher des événements. < / p>

Peut-être que ce n'était pas votre problème, mais j'espère que cela aidera quelqu'un d'autre là-bas ...


0 commentaires

0
votes

Valider votre réponse JSON .. Dans mon cas, j'ai eu une virgule supplémentaire (,) .. Une réponse presque en validité peut causer ces problèmes


0 commentaires