2013-04-18 14 views
6

Ho questo blocco di codice che trovo particolarmente lungo e difficile da comprendere: lo stack di chiamate è pieno di funzioni implicite e di parametri implicitamente aggiunti ad esso. in altre parole, vorrei chiarire il mio codice separando la funzione chiamata in ciascuno da ciascuno di essi.Quando si utilizza jQuery .each(), è possibile utilizzare una funzione non anonima?

sguardo che esempio:

$(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 ? 

risposta

4

Prova a passare riferimento funzione

Live Demo

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

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

Si noti che la funzione di callback accetta gli argomenti indexInArray e valueOfElement. Quest'ultimo può essere usato al posto di $ (questo) –

+0

Grazie per la nota, controlla la mia risposta Ho aggiunto una demo. – Adil

2

Si potrebbe anche solo fare:

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

+1. Astrazione perfettamente pulita introdotta esattamente dove necessario. –

+0

@CarlManaster Ti chiedo scusa? Non c'è assolutamente nessuna astrazione introdotta qui ... a meno che 'yourFunction' utilizzi un diverso set di parametri dalla funzione anonima, nel qual caso si può anche de-anonimizzare la funzione e nominarla. – Riduidel

+0

@Riduidel, il codice è stato estratto nella sua stessa funzione chiamata. Ciò separa nettamente la chiamata dai dettagli disordinati di ciò che accade all'interno, quindi questo blocco diventa comprensibile. Ulteriori modifiche possono essere apportate al blocco estratto per renderlo più leggibile, ma questo blocco non sarà interessato; è già stato reso pulito attraverso quell'unica, semplice, fase di astrazione: Extract Method. –

Problemi correlati