SORU
13 ŞUBAT 2011, Pazar


Anlayış dolar.() proxy jquery?

docs .proxy() işlevi argüman olarak kapsamını değiştirmek istiyorsunuz anlıyorum. Biri bana bu daha iyi, bunu niye yapıyoruz açıklayabilir misiniz?

CEVAP
13 ŞUBAT 2011, Pazar


Sonuçta yaptığı bir fonksiyonu this değerini istediğiniz değer olmasını sağlar.

Yaygın bir örnek click işleyicisi içinde yer aldığı setTimeout) bulunur.

Bunu al:

$('#myElement').click(function() {
        // In this function, "this" is our DOM element.
    $(this).addClass('aNewClass');
});

Niyeti yeteri kadar basit. myElement tıklandığında, sınıf aNewClass almalısınız. İşleyicisi içinde this tıklanma öğeyi temsil eder.

Ama eğer sınıf eklemeden önce kısa bir gecikme istesek? Biz diye bir kullanım setTimeout ulaşmasına, ama sorun her neyse fonksiyonu vermek setTimeout değeri this içinde bu işlevi olacak window yerine bizim eleman.

$('#myElement').click(function() {
    setTimeout(function() {
          // Problem! In this function "this" is not our element!
        $(this).addClass('aNewClass');
    }, 1000);
});

Peki ne yapabiliriz yerine, çağrı $.proxy(), gönderme işlevi ve değeri istiyoruz atamak this ve dönüş işlevi olacak korumak değer.

$('#myElement').click(function() {
   // ------------------v--------give $.proxy our function,
    setTimeout($.proxy(function() {
        $(this).addClass('aNewClass');  // Now "this" is again our element
    }, this), 1000);
   // ---^--------------and tell it that we want our DOM element to be the
   //                      value of "this" in the function
});

$.proxy() işlevi, ve istediğimiz değeri verdik sonra this this düzgün ayarlandığından emin olun bir işlev döndü.

Ne işe yarar? Sadece isimsiz bir fonksiyon verirçağırırbizim fonksiyonu sağlar .apply() yöntemi kullanılarak açıkça this değerini ayarlayın.

Döndürülen işlev basitleştirilmiş bir göz gibi görünebilir:

function() {
    // v--------func is the function we gave to $.proxy
    func.apply( ctx );
    // ----------^------ ctx is the value we wanted for "this" (our DOM element)
}

Bu anonim fonksiyonu setTimeout ve bütün this doğru içerik ile orijinal fonksiyonu çalıştırmak için verilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • Jucyber Tutoriais

    Jucyber Tuto

    8 EYLÜL 2009
  • Muse

    Muse

    28 EYLÜL 2006