2013-04-18 27 views
6

Bu kod bloğu özellikle uzun ve zor bir şekilde bulmakta zorlanıyorum: çağrı yığını örtülü işlevlerle dolu ve ona örtülü olarak eklenen paramterler. Başka bir deyişle, her birinden kendisinden gelen işlevi ayırarak kodumu açıklığa kavuşturmak isterim.jQuery .each() kullanırken, anonim olmayan bir işlev kullanmak mümkün mü?

o örnek Bak:

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

cevap

4

fonksiyon başvurusunu geçen deneyin

Live Demo

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

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

Geri arama işlevinin indexInArray ve valueOfElement argümanlarını kabul ettiğini unutmayın. İkincisi $ (this) –

+0

yerine kullanılabilir Not için teşekkürler, cevabımı kontrol ettik bir demo ekledim. – Adil

2

Ayrıca sadece yapabileceği:

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

+1. Mükemmel bir şekilde temizlenen soyutlama, tam olarak ihtiyaç duyulan yerlerde tanıtıldı. –

+0

@CarlManaster Size af diliyorum? Burada hiç bir soyutlama yoktur, çünkü "Sizin fonksiyonunuz" anonim fonksiyonun bir parametresinden farklı bir parametre seti kullanmazsa, bu durumda bir kişi de anonimleştirme işlevini kullanabilir ve isim verebilir. – Riduidel

+0

@Riduidel, kod kendi adlandırılmış işlevine ayıklanmıştır. Bu çağrıyı, içerideki şeylerin dağınık detaylarından temiz bir şekilde ayırır, bu yüzden bu blok anlaşılır hale gelir. Ayıklanan blokta daha okunabilir hale getirmek için daha fazla değişiklik yapılabilir, ancak bu blok etkilenmeyecektir; Bu zaten bir, basit, soyutlama adımı ile temizlendi: Özü Yöntemi. –

İlgili konular