2012-03-15 5 views
0

Je commence juste à apprendre Javascript et à essayer de construire une application en même temps ... Je pense que c'est un bon moyen d'apprendre. J'utilise le livre "JavaScript Web Applications" Alex MacCaw pour m'aider.Json incomplète sortie

Je suis coincé dans la partie où je suis supposé sérialiser certaines chaînes à Json. Lorsque le résultat devrait être quelque chose comme ça:

{"7B2A9E8D...":"{"name":"document","picture":"pictures.jpg","id":"7B2A9E8D..."}"} 

Mais c'est juste à des fins de test, mais il ne sort que le dossier d'identification et ignorer le reste.

Voici les liens vers mon code:

https://gist.github.com/2047336

Toute aide sera appréciée.

Répondre

0

Mettez comme ceci:

{"7B2A9E8D...":{"name":"document","picture":"pictures.jpg","id":"7B2A9E8D..."}} 

Avec {} vous commencez un objet ... si vous mettez « {} » est une chaîne ... mais puisque vous avez beaucoup de doubles citations à l'intérieur que chaîne, vous avez une erreur de syntaxe.

MISE À JOUR:

Le problème pour moi est qu'il ne sait pas ce que vous vouliez réaliser avec le code énorme qui devrait simplement enregistrer l'objet dans un tableau :) (donc je ne sais pas quelle partie a réellement besoin être changé). Si vous voulez quelques conseils rapides, ils sont ici:

vous avez cette paix de code:

var Event = Model.create(); 
     Event.attributes ['name', 'picture']; 
     var _event = Event.init({name: "document", picture: "images.jpg"}); 
     _event.save(); 
     var json = JSON.stringify(Event.records); 
     document.write(json); 

où vous appelez réellement init() avec un paramètre (un objet) ... mais si vous regardez à votre fonction "init" dans Model.js, il n'accepte aucun paramètre. Donc, il serait bon que vous changez votre fonction init de ceci:

init: function(){ 
      var instance = Object.create(this.prototype); 
      instance.parent = this; 
      instance.init.apply(instance, arguments); 
      return instance; 
     }, 

dans ce:

init: function(args){ 
      var instance = Object.create(this.prototype); 
      instance.parent = this; 
      instance.init.apply(instance, arguments); 
      jQuery.extend(instance, args); 
      return instance; 
     }, 

même après cela, votre JSON.stringify imprimera mauvaises valeurs (uniquement _id) car il ne peut pas pour sérialiser la référence circulaire qui existe dans votre objet javascript. Mais vos propriétés sont là et peuvent être utilisées. Vous pouvez vérifier avec votre code de changer ceci:

var Event = Model.create(); 
     Event.attributes ['name', 'picture']; 
     var _event = Event.init({name: "document", picture: "images.jpg"}); 
     _event.save(); 
     var json = JSON.stringify(Event.records); 
     document.write(json); 

dans ce:

var Event = Model.create(); 
     Event.attributes ['name', 'picture']; 
     var _event = Event.init({name: "document", picture: "images.jpg"}); 
     _event.save(); 

     var json = JSON.stringify(Event.records); 
     document.write(json); 

     for(var k in Event.records) 
      alert(Event.records[k]['picture']); 

il alertera une belle « images.jpg » chaîne pour vous, ce qui signifie que votre objet, ensemble avec vos propriétés, est enregistré et prêt à utiliser (json.stringify n'est tout simplement pas en mesure de vous le dire). J'espère que cela vous aidera dans vos efforts d'apprentissage.

+0

Merci pour votre réponse vucetica, mais c'est en fait la sortie de la fonction 'JSON.stringify().' – JayDesign

+0

J'ai mis à jour ma réponse. –

+0

Pour répondre à votre question, je suis en train d'apprendre à utiliser les codes dans le livre pour créer une application ... aussi simple que d'afficher une grille avec des événements nocturnes qui se déroulent dans une région ... Pour Maintenant, je ne fais que tester, jouer avec du code pour voir comment je peux y arriver.Je vais tester votre solution plus tard aujourd'hui et vous le faire savoir. Merci encore! – JayDesign