2009-07-29 8 views
1

Ich möchte fillContent rufen dann später rief beginEditingQuestionCode verlangsamen, bis die Ajax-Funktion beendet ist?

fillContent(cid, "questions"); 
beginEditingQuestion(qid); 

Das Problem ist, dass ich nicht beginEfitingQuestion, bis das ganze Ajax in fillContent getan wird geläutet kann. Gibt es eine elegante Möglichkeit, den Code zu verzögern? Die einzige Idee, die ich mir vorstellen kann, ist, eine völlig neue Funktion fillContentAndBeginEditingQuestion zu erstellen, in der ich fillContent in die neue Funktion kopiere und einfüge und im finalen Ajax-Call in beginEditingQuestion hinzufüge. Das erscheint mir nicht sehr elegant, ich möchte fillContent in anderen Kontexten wiederverwenden. Was soll ich machen?

Antwort

3

Sie können festlegen, dass fillContent einen Rückrufparameter annimmt und den Callback aufrufen soll, wenn er fertig ist. Im Grunde genommen würden Sie einfach callback() hinzufügen; in den Körper von fillContent am Ende. Auf diese Weise würde man so etwas schreiben, und haben die übergebene Funktion am Ende ausgeführt:

fillContent (cid, "questions", function() { beginEditingQuestion (qid); }); 
0

Es klingt wie Sie „fillContent“ ändern müssen, so dass eine ihrer Parameter ist eine Rückruffunktion, die wird aufgerufen, wenn der AJAX zurückkehrt.

3

Ich glaube nicht, dass Sie "verlangsamen" wollen, sondern lieber auf etwas warten wollen, bevor das nächste Stück Arbeit beginnt.

Ein Muster dafür, das in vielen Sprachen verwendet wird, ist die Verwendung von Events.

Konzeptionell:

Sie registrieren ein Interesse an einem "DoneFillingContent" Ereignis, sagen Sie bitte beginEditingQueue() aufrufen, wenn das Ereignis eintrifft.

fillContent hat die Verantwortung ein Ereignis an alle interessierten Parteien zu senden. Er weiß nicht, was beginEditingQueue() tut, es ist nur eine Arbeit, die bei der Fertigstellung erledigt werden muss.

In der einfachsten Version des Musters erlauben Sie nur eine Callback-Funktion.

Verwandte Themen