Backbone.js – les données ne sont pas collectées même si l'extraction est réussie

J'essaie de remplir une collection à partir d'un fichier JSON simple dans le cadre de l'apprentissage de backbone.js. Mais je ne peux pas le faire fonctionner.

L'appel AJAX est effectué (vérifié avec FireBug), mais la méthode toJSON renvoie undefined .

Qu'est-ce que je fais mal?

 theModel = Backbone.Model.extend(); theCollection = Backbone.Collection.extend({ model: aModel, url: "source.json" }); theView = Backbone.View.extend({ el: $("#temp"), initialize: function () { this.collection = new theCollection(); this.collection.fetch(); this.render(); }, render : function () { $(this.el).html( this.collection.toJSON() ); // Returns blank } }); var myView = new theView; 

Voici mon JSON:

 [{ "description": "Lorem ipsum..." }, { "description": "Lorem ipsum..." }] 

fetch est asynchrone, votre collection ne sera pas encore remplie si vous appelez immédiatement render . Pour résoudre ce problème, il suffit de lier l'événement de réinitialisation de la collection (événement de synchronisation pour Backbone> = 1.0) au rendu de la vue:

 theView = Backbone.View.extend({ el: $("#temp"), initialize: function () { this.collection = new theCollection(); // for Backbone < 1.0 this.collection.on("reset", this.render, this); // for Backbone >= 1.0 this.collection.on("sync", this.render, this); this.collection.fetch(); }, render : function () { console.log( this.collection.toJSON() ); } }); 

Notez le troisième argument de la méthode bind, en donnant le contexte correct à la méthode: http://documentcloud.github.com/backbone/#FAQ-this

Je crois que le problème réside dans votre json

Soit vous remplacez la méthode d'analyse sur la collection, pour travailler avec votre json

Ou vous pourriez changer le json 🙂

 [{ "description": "Lorem ipsum..." }, { "description": "Lorem ipsum..." }] 

Je crois que c'est à quoi ressemble votre json, juste un éventail de vos modèles.