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/

4

1 回答 1

6

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

_this = this;

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

var _this = this;

演示:http: //jsfiddle.net/ambiguous/9NQNz/

于 2012-10-25T04:25:59.270 回答