jQuery.proxy
17 Январь 2010
Тут в jQuery 1.4 появилась функция proxy, которая позволяет задать любой контекст методу повешенному на событие вместо элемента к которому это событие относиться. То есть раньше было так
$("#id").click(function(e){
this; // document.getElementById("id")
})
Но когда пишешь плагин это не всегда удобно.
MyNewPlugIn = function (){
$("#id").click(this.myClickEventHandler);
}
MyNewPlugIn.prototype = {
myClickEventHandler : function (e){
this; // document.getElementById("id")
this.myOtherMethod(); // error
},
myOtherMethod : function (){
// some code here
}
}
Хотелось бы что бы у myClickEventHandler контекст был MyNewPlugIn, а не document.getElementById("id") тогда было бы легко вызвать метод myOtherMethod. Вот именно для этого случая и сделали функцию proxy
MyNewPlugIn = function (){
$("#id").click($.proxy(this, "myClickEventHandler"));
}
MyNewPlugIn.prototype = {
myClickEventHandler : function (e){
this; // MyNewPlugIn
this.myOtherMethod(); // success
},
myOtherMethod : function (){
// some code here
}
}
Но немногие знают что эта функция нахуй не нужна, потому что и раньше без нее можно было прекрасно обойтись
MyNewPlugIn = function (){
$("#id").bind("click",this,this.myClickEventHandler);
}
MyNewPlugIn.prototype = {
myClickEventHandler : function (e){
this; // document.getElementById("id")
var that = e.data;
that.myOtherMethod() // success
},
myOtherMethod : function (){
// some code here
}
}
Свежие комментарии