8

Ich bin neu in dieser Welt und ich muss einige der Konzepte von Backbone und Marionette verstehen. Hier versuche ich einige der Konzepte zu erklären, die ich lerne. Es wäre großartig, ein Feedback zu ihnen zu haben.Verstehen von Backbone und Marionette View lifecycle

Die Funktion render definiert die Logik zum Rendern einer Vorlage. Wenn es fertig ist, wird der Rückruf onRender aufgerufen. Ich nehme an, die gerenderte Ansicht wurde nicht an das DOM angehängt. Es besteht aus einem tagName (der Standardwert ist div), die die Vorlage enthält, die ich daran anschließe. Um dieses Tag explizit in das DOM einzufügen, muss es irgendwo angehängt werden. Liege ich falsch?

Im Allgemeinen mache ich folgendes.

var view = new MyView(); 
view.render(); 
$("container").append(view.$el);​ 

Marionette erweitert Backbone mit dem Konzept der Regionen. Die show Methode kann für eine Region aufgerufen werden, um eine bestimmte Ansicht anzuzeigen.

var view = new MyView(); 
region.show(view); 

In diesem Fall wird die show Methode, um die render Funktion auf eigenem wird anrufen und schließlich, wenn der Inhalt der Anzeige wird in dem DOM gestellt wird, wird die onShow auf dieser Ansicht genannt. Ist es o.k?

Von Marionette doc gibt es auch einen anderen Rückruf namens onDomRefresh. Aus meinen Experimenten habe ich festgestellt, dass diese Methode vor onShow aufgerufen wird. Meine Annahme ist also, dass die Ansicht noch nicht an das DOM angehängt wurde. Aber der Arzt sagt folgendes.

ausgelöst, nachdem die Sicht gemacht wurde, hat sich in der DOM über eine Marionette.Region gezeigt worden ist, und erneut gerendert wurde.

Können Sie uns ein paar Hinweise geben?

Vielen Dank im Voraus.

Antwort

3

Für was es wert ist, glaube ich, alles, was Sie gesagt haben, ist mehr oder weniger korrekt.

an der Quelle der Suche (verfügbar here - suchen Sie nach „DomRefresh“) wird die MonitorDOMRefresh Bits in jede Ansicht gemischt und fügen Sie diese API:

return function(view){ 
    view.listenTo(view, "show", function(){ 
    handleShow(view); 
    }); 

    view.listenTo(view, "render", function(){ 
    handleRender(view); 
    }); 
}; 

Also wirklich, alles, was passiert, ist die Anbringung 2-Ereignis-Listener zu der Ansicht, und die Rückrufe (handleShow/handleRender) einen booleschen _isShown oder _isRendered und rufen triggerDomRefresh, die sagt:

function triggerDOMRefresh(view){ 
    if (view._isShown && view._isRendered){ 
    if (_.isFunction(view.triggerMethod)){ 
     view.triggerMethod("dom:refresh"); 
    } 
    } 
} 

Also, los gehts ... onDomRefresh wird immer aufgerufen, wenn die Ansicht gerendert, angezeigt und dann neu gerendert wurde.

Hoffe, dass hilft!

Verwandte Themen