Магистраль, инициировать события, когда все загружено

В моем основном приложении я загружаю 3 коллекции и привязываю событие «сброс» к функции рендеринга. Таким образом, когда я получаю коллекции, я печатаю различные результаты, но не одновременно.

Я бы использовал отложенные методы jquery ($.when, $.then) для печати всех одновременно, как это сделать, если я использую «события привязки» для представлений?

это код:

Маршрутизатор:

App.Routers.test1 = Backbone.Router.extend({  

    routes: {       
        "/test" : "test"        
    },

    initialize: function() {                            
        // Models
        this.Models_1 =     new App.Collections.coll_1;     
        this.Models_2 =     new App.Collections.coll_2;
        this.Models_3 =     new App.Collections.coll_3;

        // Views
        this.View_1 =       new App.Views.view_1( {model: this.Models_1} );
        this.View_2 =       new App.Views.view_2( {model: this.Models_2} );
        this.View_3 =       new App.Views.view_3( {model: this.Models_3} );         
    },

    test: function() { 
        $.when(

            this.Models_1.fetch(),
            this.Models_2.fetch(),
            this.Models_3.fetch()

        ).then(function() {

            // ?????????????????????????

            //  What should I do here?

            // ?????????????????????????

        });
    }

});

Вид 1:

App.Views.view_1 = Backbone.View.extend({

    initialize: function() {
        _.bindAll(this, 'render');
        this.model.bind('reset', this.render);
    },

    render: function() {

        // print the data...

    }

}); 

person keepyourweb    schedule 22.08.2011    source источник


Ответы (2)


Не уверен, куда вы идете со своими отложенными событиями. В Backbone уже есть способ сделать это.

В вашем представлении привяжите событие «обновить» из коллекции к функции рендеринга представления. Всякий раз, когда вы будете вызывать выборку для коллекции, будет инициировано событие обновления, и ваше представление будет перерисовано.

person Julien    schedule 22.08.2011
comment
В последней версии магистрали обновление события заменено сбросом. Однако теперь приложение работает нормально, но я бы хотел, чтобы при вызове выборки для коллекции приложение ждало загрузки всех коллекций, а затем приступало к рендерингу. Таким образом, представления будут печататься одновременно. - person keepyourweb; 22.08.2011
comment
Ах, это не было ясно из вашего вопроса. Я думаю, вам следует удалить привязку к событию сброса и создать новую загрузку: выполнено или что-то в этом роде. Прислушивайтесь к этому в своих взглядах и вызывайте их в себе. - person Julien; 22.08.2011

Возможно, вам нужен метод подчеркивания defer?

Откладывает вызов функции до тех пор, пока текущий стек вызовов не очистится, аналогично использованию setTimeout с задержкой 0. Полезно для выполнения дорогостоящих вычислений или рендеринга HTML по частям, не блокируя обновление потока пользовательского интерфейса.

person cjroebuck    schedule 24.08.2011