2014-12-17 4 views
5

Mein Verständnis von $$ postDigest ist, dass es eine Möglichkeit ist, einen Rückruf nach dem aktuellen Digest-Zyklus zu feuern - ohne dabei einen neuen Digest-Zyklus zu verursachen.

Bedeutet dies jedoch, dass alle DOM-Effekte, die durch den aktuellen Digest-Zyklus verursacht werden, für den Rückruf im $$ postDigest sichtbar sind.

der Pseudo-Code unten angegeben:

//some code affecting the width of an element and triggering a digest loop 
    myModel.width = 10; //bound back to dom element with id = 'myId' 


    $$postDigest(function(){ 
    //some callback running after the most recent digest loop 
    //gets the width of a DOM element by reading the value directly from the DOM element  
    //that was changed in the previous digest loop 
    var width = $('#myId').width(); 
    //Will width always be 10 here? 
    }); 

Werfen wir einen Grenzwert in der Stromschleife führt zu ändern, um die Breite eines DOM-Element verdauen nehmen. Dann feuere ich in $$ postDigest einen Callback mit einem Legacy-Code, der die geänderte Breite direkt vom DOM-Element liest. Ist es sicher, den Wert aus dem DOM-Element in $$ postDigest zu lesen, da dies nach Abschluss des Digest-Zyklus passieren soll? Mit anderen Worten, sollte der Browser fertig sein, um die Auswirkungen des Digest-Zyklus zu reproduzieren, wenn das $$ postDigest ausgeführt wird?

Ich bin kein Fan von diesem Muster, haben aber mit einigen nicht Winkel Code

Antwort

0

$$postDigest Brände eine Callback-Funktion nach dem aktuellen $digest Zyklus integrieren abgeschlossen ist, das heißt, es wird einmal, nachdem alle Uhren die manipulieren DOM und bevor der Browser rendert.