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
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.
jQuery - Ne farklar(belge) $arasında.v...
JQuery yönlendirme algılama dolar.ajax...
JQuery nasıl dolar.ajax hata yanıtı me...
JavaScript Dizi JQuery İle PHP İçin ge...
Nasıl proxy arkasından TV izleme kulla...