2012-08-29 16 views
5

Estoy muy cansado o realmente confundido ... Pero no estoy seguro ... Tengo una configuración javascript de parse.com (es exactamente como backbone.js solo con el análisis en lugar de la red troncal). Y tengo un modelo y una colección, y todo funciona. Pero el maldito toJSON(); no funciona, simplemente devuelve un [] en console.log ... Sin embargo, si ejecuto la misma función en la consola de Chromes, funciona y devuelve los valores correctos.Backbone toJSON

¡Cualquier ayuda !?

Todo este código preciosa está envuelto en un documento listo (y tenía algún otro código que no es relavent y sí he Parse.initialize() 'd ella.

var Schedule = Parse.Object.extend({ 
    className: "schedule" 
    }); 

    var ScheduleList = Parse.Collection.extend({ 
    model: Schedule 
    }); 

    schedule = new ScheduleList(); 
     schedulejs3 = schedule.toJSON(); 
     schedule.query = new Parse.Query(Schedule); 
     schedule.query.ascending("date"); 
     schedule.query.limit('500'); 
     schedulejs2 = schedule.toJSON(); 
     schedule.fetch(); 

     schedulejs = schedule.toJSON(); 
     console.log(schedulejs,schedulejs2,schedulejs3); <-- All three return [] 

    var ScheduleView = Parse.View.extend({ 
    el: $("#schedule-holder"), 
    initialize: function() { 
     this.schedule = new ScheduleList(); 
     this.schedule.query = new Parse.Query(Schedule); 
     this.schedule.query.ascending("date"); 
     this.schedule.query.limit('500'); 

     this.schedule.fetch(); 

     this.schedule.js = this.schedule.toJSON(); 

     this.render; 
    }, 

    render: function() { 
     var template = Handlebars.compile($("#schedule-item").html()); 
     $(this.el).html(template({shows: this.schedule.toJSON()})); 
     return this; 
    } 
    }); 

    var App = new ScheduleView().render(); 

Pero si abro la consola en Chrome y correr schedule.toJSON(); obtengo los valores correctos ... Como puede ver, he destruido mi configuración de backbone.js tratando de resolver esto (en caso de que se esté preguntando por qué todo está por todas partes). Y un pequeña nota, estoy usando Zepto.js no jQuery.

¡Gracias!

Respuesta

19

Probablemente en el momento de ejecutar schedule.toJSON() todavía está vacío.

Recuerde que Collection.fetch() es un método asincrónico.

intenta modificar esta línea:

schedule.fetch(); 

Por esto:

schedule.fetch({ success: function() { console.log("what about now?", schedule.toJSON()) } }; 

(Probablemente vendrá con un tema contexto tratar de hacer schedule variable sea accesible en el manejador de success)