我无法从私有方法中读取jQuery-UI小部件工厂选项

时间:2012-07-16 05:03:39

标签: jquery-ui widget factory

我是jQueryUI小部件工厂的新手,因此我可能会问愚蠢。 我想创建一个ajax工具提示,我可以通过一个选项设置ajax调用的url,但是这个选项在包含ajax调用的_mouseOver方法中是不可读的。

    (function($) {
        $.widget("ui.tooltip", {
   options: {
        url: ''
    },
  _create: function() {
      alert(this.options.url); //it works
      this.element.bind({
        mouseenter: this._mouseOver
      });
    },
  _mouseOver: function() { 
      alert(this.options.url); //it dosen't works
    },
  ...
     

正如我设定:   $(“。text”)。tooltip({url:“something”});

请有人帮助我。

2 个答案:

答案 0 :(得分:3)

(function ($) {
    $.widget("ui.tooltip", {
        self: null,
        options: {
            url: ''
        },
        _create: function () {
            self = this;
            self.element.bind({
                mouseenter: self._mouseOver
            });
        },
        _mouseOver: function () {
            alert(self.options.url); // it should work
        }
    });
})(jQuery);

在_mouseOver中使用“this”是指事件函数中的当前对象,而不是窗口小部件本身。您应该创建一个变量并将小部件(this)放在其上,以便能够在任何事件或方法中使用它。 在jQuery中使用$ .each()函数时会发现相同的行为。

答案 1 :(得分:0)

在这种情况下,_mouseOver函数的“this”上下文是元素而不是jquery小部件。这就是为什么你没有获得options.url。

您可以尝试使用此代码作为开头:

_create: function() {
      alert(this.options.url); //it works
      this.element.tooltip = this;
      this.element.bind({
        mouseenter: this._mouseOver
      });
    },  
_mouseOver: function() { 
  alert(this.tooltip.options.url); //it dosen't works
},

没有经过测试。