2013-04-18 8 views
6

Mam ten blok kodu, który uważam za szczególnie długi i trudny do udoskonalenia: stos wywołań jest pełen niejawnych funkcji i parametrów dodanych do niego. innymi słowy, chciałbym wyjaśnić mój kod poprzez oddzielenie funkcji wywołanej w każdej z nich.Podczas korzystania z jQuery .each(), można użyć funkcji nieanonimowej?

wygląd, który przykład:

$(xml).find('group').each(function() { 
    var groupName = $(this).attr('name'); 
    // There is here around 100 lines of codes I would like to split in 
    // at least five functions, And I'm sure it is possible to use named functions 
    // instead of implicit ones, no ? 

Odpowiedz

4

Spróbuj przejściu przegląd funkcji

Live Demo

$(xml).find('group').each(myfun); 

function myfun(i, item) 
{ 
    alert(item.id); 
} 
+1

Należy zauważyć, że funkcja wywołania zwrotnego akceptuje argumenty indexInArray i valueOfElement. Ten drugi może być użyty zamiast $ (this) –

+0

Dzięki za wiadomość, sprawdź moją odpowiedź Dodałem wersję demo. – Adil

2

Można też po prostu zrobić:

$(xml).find('group').each(function(){ 
    yourFunction(); 
}); 
+0

+1. Idealnie czysta abstrakcja wprowadzona dokładnie tam, gdzie jest to potrzebne. –

+0

@CarlManaster Błagam o ułaskawienie? Nie ma tu absolutnie żadnej abstrakcji ... chyba że 'twoja funkcja' używa innego zestawu parametrów od funkcji anonimowej, w którym to przypadku można również zdekononimizować funkcję i nazwać ją. – Riduidel

+0

@Riduidel, kod został wyodrębniony do własnej nazwanej funkcji. To czysto oddziela wezwanie od brudnych szczegółów tego, co dzieje się wewnątrz, więc ten blok staje się zrozumiały. Dalsze zmiany mogą zostać wprowadzone do wyodrębnionego bloku, aby uczynić go bardziej czytelnym, ale blok ten nie zostanie zmieniony; zostało już oczyszczone przez ten prosty, krok abstrakcji: Metoda wyodrębniania. –