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
    }
}
Комментирование отключено.