Backbone.js: не рендерит при загрузке страницы

Рейтинг: 1Ответов: 1Опубликовано: 15.12.2014

Здравствуйте.

У меня проблема такого характера, что при загрузке страницы - она пустая, как только в косоле я прописываю: "showContacts.render().el", все прекрасно работает.

Вот код:

$(function() {

    window.App = {
        Model: {},
        View: {},
        Collection: {}
    };

    window.getTemplate = function( id ) {
        return _.template( $( '#' + id ).html() );
    };

    App.Model.Contact = Backbone.Model.extend({});

    App.Collection.Contacts = Backbone.Collection.extend({
        model: App.Model.Contact,
        url: 'query.php',
        initialize: function() {
            this.fetch();
            this.toJSON();
        }
    });

    App.View.Contact = Backbone.View.extend({
        tagName: 'div',
        template: getTemplate('contactBlock'),
        render: function() {
            this.$el.html( this.template( this.model.toJSON() ) );
            return this;
        }
    });

    App.View.Show = Backbone.View.extend({
        el: $('#contacts'),
        initialize: function() {
            this.collection = new App.Collection.Contacts();
            this.render();
        },
        render: function() {
            this.collection.each(this.addcontact, this);
            return this;
        },
        addcontact: function( modelcontact ) {
            var contact = new App.View.Contact({ model: modelcontact });
            this.$el.append( contact.render().el );
        }
    });

    window.showContacts = new App.View.Show();

}());

Никак не могу понять, почему при загрузке страницы она пустая.

Ответы

▲ 1

Есть соображение, что на момент отрисовки коллекция еще пуста.
Надо послать запрос, дождаться ответа, потом только рендерить.