J'essaie de charger JSON (à partir de json_encode de php) dans une collection Backbone JS. J'ai simplifié le problème à:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
var myCollection = new MyCollection(myJSON, { view: this });
Et:
MyObject = Backbone.Model.extend({
id: null,
name: null,
description: null
});
MyCollection = Backbone.Collection.extend({
model: MyObject,
initialize: function (models,options) { }
});
Erreur:
Uncaught TypeError: impossible d'utiliser l'opérateur 'in' pour rechercher 'id' dans
Problème similaire: Backbone: récupérer la collection depuis le serveur
Mon JSON semble certainement être dans le bon format, est-ce que je manque quelque chose d’évident? J'ai essayé d'utiliser simplement id: "1" par opposition à "id" avec le même résultat.
Votre JSON est toujours au format chaîne. Transmettez-le à JSON.parse avant de l'assigner:
var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]');
Vous avez oublié le hash defaults
dans votre modèle.
MyObject = Backbone.Model.extend({
defaults: {
id: null,
name: null,
description: null
}
});
Voir la documentation
donc je manque peut-être le point complètement mais les problèmes semblent être les "guillemets simples" autour du tableau. C'est ça:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
devrait être:
var myJSON = [{ "id":"1","name":"some name","description":"hmmm"}];
Php, afik, n'ajoute pas les guillemets simples, il devrait donc être aussi simple que de changer une ligne qui dit:
$my_js = "var myJSON = '" . json_encode($my_array_to_send)) . "';";
à:
$my_js = "var myJSON = " . json_encode($my_array_to_send)) . "; ";