jQuery小部件工厂 _trigger实例

4
当使用_trigger方法来触发事件时,我遇到了一个问题,但我无法正确理解。

基本上,如果我的小部件有多个实例,则在同一页上最后一个被实例化的小部件优先于其他所有小部件。

我已经学习并成功使用$.extend创建了一个唯一于实例的对象,但是我对如何解决以下问题感到困惑:

如何正确地使用_trigger方法,以便它可以在每个实例上启用。

(function($) {
  $.widget("a07.BearCal", {
    options: {  },
    _create: function() {
        _this = this;
        this.element.click(function() {
            _this._trigger("testTrig");
        });
    },
  });
})(jQuery);

// Instantiate widget on .full
$('.full').BearCal({
    testTrig: function() {
        console.log("testTrig event: full");
    }
});

// Instantiate widget on .mini
$('.mini').BearCal({
    testTrig: function() {
        console.log("testTrig event: mini");
    }
});

这里提供一个示例:http://jsfiddle.net/NrKVP/13/

1个回答

6

您有一个意外的全局变量:

_this = this;

这意味着插件的两个实例都将它们的this放入构造函数中相同的(全局)_this。结果是所有插件实例都使用最后一个绑定的this。您需要这样做:
var _this = this;

Demo: http://jsfiddle.net/ambiguous/9NQNz/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接