Событие Backbone.js после завершения view.render()

Кто-нибудь знает, какое событие будет запущено после визуализации представления в backbone.js?

Ответ 1

Насколько я знаю - ни один не запущен. Функция Render пуста в исходном коде.

Реализация рендеринга по умолчанию - это no-op

Я бы порекомендовал просто запускать его вручную, когда это необходимо.

Ответ 2

Я столкнулся с этим post, который кажется интересным

var myView = Backbone.View.extend({ 

    initialize: function(options) { 
        _.bindAll(this, 'beforeRender', 'render', 'afterRender'); 
        var _this = this; 
        this.render = _.wrap(this.render, function(render) { 
            _this.beforeRender(); 
            render(); 
            _this.afterRender(); 
            return _this; 
        }); 
    }, 

    beforeRender: function() { 
       console.log('beforeRender'); 
    }, 

    render: function() { 
        return this; 
    }, 

    afterRender: function() { 
        console.log('afterRender'); 
    } 
});

Ответ 3

Или вы можете сделать следующее, что должно быть похоже на базовый код (шаблон Observer, aka pub/sub). Это путь:

var myView = Backbone.View.extend({ 
    initialize: function() {  
        this.on('render', this.afterRender);

        this.render();
    },

    render: function () {  
        this.trigger('render');
    },

    afterRender: function () {
    }
});

Изменить: this.on('render', 'afterRender'); не будет работать, потому что Backbone.Events.on принимает только функции. Магия .on('event', 'methodName'); стала возможной благодаря Backbone.View.delegateEvents и как таковая доступна только с событиями DOM.

Ответ 4

Если вы используете Marionette, Marionette добавляет события show и render к представлениям. См. fooobar.com/questions/193048/... для примера.

С одной стороны, Marionette добавляет множество других полезных функций, которые могут вас заинтересовать.

Ответ 5

Вместо добавления обработчика событий вручную для рендеринга при иналинизации вы также можете добавить событие в раздел "События" вашего представления. См. http://backbonejs.org/#View-delegateEvents

например.

events: {
   'render': 'afterRender'
}

afterRender: function(e){
    alert("render complete")
},

Ответ 6

 constructor: function(){
   Backbone.View.call(this, arguments);     
   var oldRender = this.render
   this.render = function(){
      oldRender.call(this)
      // this.model.trigger('xxxxxxxxx')
   }       
 }

как http://jsfiddle.net/8hQyB/