2012-08-29 26 views
5

Tôi là một trong hai ồ ạt mệt mỏi hoặc thực sự bối rối ... Nhưng tôi không chắc chắn ... Tôi có một thiết lập javascript parse.com (nó chính xác như backbone.js chỉ với phân tích cú pháp thay vì xương sống). Và tôi có một mô hình, và một bộ sưu tập, và tất cả đều hoạt động. Nhưng darn toJSON(); không hoạt động, nó chỉ trả về một [] trong console.log ... Tuy nhiên nếu tôi chạy cùng một chức năng trong giao diện điều khiển Chromes nó hoạt động và trả về các giá trị chính xác.Backbone toJSON

Bất kỳ trợ giúp nào !?

Tất cả các mã đáng yêu này được bọc trong một tài liệu đã sẵn sàng (và nó có một số mã khác mà không phải là relavent và vâng tôi đã Parse.initialize() 'd nó.

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

Nhưng nếu tôi mở giao diện điều khiển trong Chrome và chạy schedule.toJSON(); Tôi nhận được các giá trị chính xác ... Như bạn có thể thấy tôi đã loại butchered thiết lập backbone.js của tôi cố gắng tìm ra điều này (trong trường hợp bạn đang tự hỏi tại sao tất cả mọi thứ ở khắp nơi). lưu ý nhỏ, tôi đang sử dụng Zepto.js không phải jQuery.

Cảm ơn!

Trả lời

19

Có lẽ tại thời điểm bạn thực hiện schedule.toJSON() nó vẫn còn trống.

Hãy nhớ rằng Collection.fetch() là một phương pháp không đồng bộ.

Cố gắng sửa đổi dòng này:

schedule.fetch(); 

Bằng cách này:

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

(Có lẽ bạn sẽ đi kèm với một bối cảnh vấn đề cố gắng làm cho schedule biến để được truy xuất vào xử lý success)