2013-08-09 23 views
8

Jestem nowy na tym świecie i muszę zrozumieć niektóre koncepcje kręgosłupa i marionetki. Tutaj próbuję wyjaśnić niektóre pojęcia, których się uczę. Byłoby wspaniale mieć pewne opinie na ich temat.Zrozumienie szkieletu i marionetki Zobacz cykl życia

Funkcja render definiuje logikę do renderowania szablonu. Po zakończeniu wywołania zwrotnego onRender jest wywoływana. Tutaj przypuszczam, że renderowany widok nie został dołączony do DOM. Składa się on z tagName (domyślnie jest to div), który zawiera dołączony do niego szablon. Aby jawnie wstawić ten tag do DOM, muszę go gdzieś dołączyć. Czy się mylę?

Generalnie wykonuję następujące czynności.

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

Marionetka poszerza kręgosłup o koncepcję regionów. Metodę show można wywołać w regionie, aby przedstawić określony widok.

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

W tym przypadku metoda show będzie wywołać funkcję render we własnym zakresie i na koniec, gdy zawartość widoku zostaną wprowadzone w DOM The onShow nazywany jest na tym widoku. Czy to jest w porządku?

Od Marionette doc jest również inny numer zwrotny o nazwie onDomRefresh. Z moich eksperymentów zauważyłem, że ta metoda jest wywoływana przed onShow. Tak więc, moim przypuszczeniem jest, że widok nie został jeszcze przyłączony do DOM. Ale doktor mówi co następuje.

wyzwalane po pogląd został nadany został pokazany w DOM pośrednictwem Marionette.Region i został ponownie renderowane.

Czy możesz podać kilka wskazówek na ten temat?

Z góry dziękuję.

Odpowiedz

3

Co jest warte, wierzę, że wszystko, co powiedziałeś, jest mniej więcej poprawne.

Patrząc na źródła (dostępny here - poszukaj „DomRefresh”) bity MonitorDOMRefresh zmieszane są w każdej widzenia i dodaj API:

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

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

Tak naprawdę, wszystko co się dzieje jest zamocowanie 2 detektory zdarzeń do widzenia, i wywołania zwrotne (handleShow/handleRender) ustawić wartość logiczną _isShown lub _isRendered i nazywają triggerDomRefresh, który mówi:

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

A więc ... onDomRefresh zostanie wywołany za każdym razem, gdy widok zostanie wyświetlony, wyświetlony, a następnie ponownie renderowany.

Nadzieję, że pomaga!