webentwicklung-frage-antwort-db.com.de

Backbone.js-Ereignis, nachdem view.render () beendet wurde

Weiß jemand, welches Ereignis ausgelöst wird, nachdem eine Ansicht in backbone.js gerendert wurde?

28
Stefan Schmidt

Soweit ich weiß - keiner wird gefeuert . Die Renderfunktion ist im Quellcode leer.

Die Standardimplementierung von Render ist ein No-Op

Ich würde nur empfehlen, es bei Bedarf manuell auszulösen.

18
Arnis Lapsa

Ich bin auf dieses Post gestoßen, was interessant erscheint

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'); 
    } 
});
37
abritez

Oder Sie können Folgendes tun, wie der Backbone-Code aussehen soll (Observer-Muster, auch bekannt als Pub/Sub). Dies ist der Weg zu gehen:

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

        this.render();
    },

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

    afterRender: function () {
    }
});

Bearbeiten: this.on('render', 'afterRender'); funktioniert nicht - weil Backbone.Events.on Nur Funktionen akzeptiert. Die .on('event', 'methodName'); -Magie wird durch Backbone.View.delegateEvents Ermöglicht und ist daher nur bei DOM-Ereignissen verfügbar.

23
pilau

Wenn Sie Marionette verwenden, fügt Marionette show und render Ereignisse zu Ansichten hinzu. Siehe diese StackOverflow-Frage für ein Beispiel.

Nebenbei bemerkt, Marionette fügt viele andere nützliche Funktionen hinzu, die Sie interessieren könnten.

2
Jon Onstott