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

  • audivila

    audivila

    5 HAZİRAN 2009
  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • SlimaksClass

    SlimaksClass

    15 Kasım 2010