在动态创建的元素(即自定义控件)上绑定时,JQuery引用对象实例

在动态创建的元素(即自定义控件)上绑定时,JQuery引用对象实例,jquery,oop,custom-controls,jquery-events,Jquery,Oop,Custom Controls,Jquery Events,我正在实现一个客户端“自定义控件”,但我很难在事件处理程序中获得对创建控件的对象的引用。最好用一些简单的代码来解释它 function myControl(text) { this.Text = text; this.DoAlert = function (e) { alert(e.Text); }; this.Create = function (container) { var btn = $('<BUTT

我正在实现一个客户端“自定义控件”,但我很难在事件处理程序中获得对创建控件的对象的引用。最好用一些简单的代码来解释它

    function myControl(text) {
        this.Text = text;
        this.DoAlert = function (e) { alert(e.Text); };
        this.Create = function (container) {
            var btn = $('<BUTTON/>');
            btn.html('Click Me');

            container.append(btn);

            btn.bind('click', this, this.DoAlert);
        }
    }

    $(document).ready(function () {
        var control1 = new myControl('Button 1');
        control1.Create($('#container'));

        var control1 = new myControl('Button 2');
        control1.Create($('#container'));

    });
功能myControl(文本){
this.Text=文本;
this.DoAlert=函数(e){alert(e.Text);};
this.Create=函数(容器){
var btn=$('');
html(“单击我”);
容器追加(btn);
btn.bind('click',this,this.DoAlert);
}
}
$(文档).ready(函数(){
var control1=新的myControl(“按钮1”);
控件1.创建($(“#容器”);
var control1=新的myControl(“按钮2”);
控件1.创建($(“#容器”);
});
如您所见,我正在创建两个用不同字符串初始化的myControl实例,在DoAlert内部,如何获取创建按钮的对象的引用,以便获取其属性


这是Javascript/jQuery可以接受的方法还是我应该做其他事情?

您有多种选择:

1) 您可以在事件处理程序周围的闭包中包含

function MyControl() {
    var _this = this;
    this.DoAlert = function(e) { alert(_this.Text); };
    // ...
}
变量_this将绑定到
this
甚至在函数
DoAlert
内部

2) 您使用
$。代理
(参考):

3) 正确使用事件数据(参考:)


我个人推荐2)因为它非常透明(
构造函数中的此
与事件处理程序中的此
相同)。

太棒了,谢谢!我在问问题和回答问题之间的1分钟内发现了选项3,但由于您强调的原因,我实施了选项2。非常感谢你。
function MyControl() {
    // ...
        btn.bind('click', $.proxy(this.DoAlert, this));
    // ...
}
function MyControl() {
    this.DoAlert = function(e) { alert(e.data.Text); }
    // ...
}