2012-08-29 10 views
5

albo jestem ogromnie zmęczony lub naprawdę mylić ... Ale nie jestem pewny ... Mam parse.com javascript setup (to jest dokładnie jak backbone.js tylko z parse zamiast szkieletu). Mam model i kolekcję i wszystko działa. Ale chowa się do JSON(); nie działa, po prostu zwraca [] w console.log ... Jednak jeśli uruchomię tę samą funkcję w konsoli Chromes, to działa i zwraca poprawne wartości.Backbone toJSON

Każda pomoc !?

Wszystko to piękny kod jest owinięty w dokumencie gotowy (i miał jakiś inny kod, który nie jest relavent i tak mam Parse.initialize() byłyby to.

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(); 

Ale jeśli mogę otworzyć konsolę w Chrome i metę schedule.toJSON(); Dostaję poprawne wartości ... Jak widzisz, trochę zmasakrowałem moją konfigurację backbone.js, próbując to rozgryźć (gdy się zastanawiasz, dlaczego wszystko jest wszędzie). mała uwaga, używam Zepto.js nie jQuery.

Dzięki!

Odpowiedz

19

Prawdopodobnie w czasie wykonywania schedule.toJSON() nadal jest pusta.

Pamiętaj, że Collection.fetch() jest asynchroniczny metoda.

próbować modyfikować tę linię:

schedule.fetch(); 

Przez to:

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

(Prawdopodobnie będzie pochodzić z kontekstowego emisji próbować schedule zmienną być dostepne do obsługi success)