2012-02-16 47 views
1

使用jQuery UI窗口小部件工廠模式創建窗口小部件本身後,是否有全局引用?jQuery UI Widget Factory獲取當前窗口小部件的上下文

我試着做這樣的事情設置一個小部件VAR等於小窗口:

$.widget("my.widget", { 
    _widget: this, 
    _create: function() { 
    // _widget should == the whole widget 
    } 
}); 

我也試圖通過抓住jQuery的小部件的情況下,如:

$.widget("my.widget") 

我無法弄清楚在widget的內部應該如何回調widget。

回答

1

雖然你通過「這個」關鍵字參考實例的小部件方法中:

$.widget('my.widget', { 
    foo: true, 
    _create: function() { 
     var foo = this.getFoo(); 
    }, 
    getFoo: function() { 
     return this.foo; 
    } 

}); 

如果你在一個方法,如果發現環境已經發生變化(這是常有的情況下書寫時jQuery的),那麼你可以只是一個參考存儲「這個」在一個局部變量:

$.widget('my.widget', { 
    foo: true, 
    _create: function() { 
     var self = this; 
     this.element.click(function() { 
      var foo = self.getFoo(); 
     }); 
    }, 
    getFoo: function() { 
     return this.foo; 
    } 

}); 
1

正如前面提到的,this是調用插件功能,從插件的最常見的方式。

在您的例子,它沒有意義要做到這一點:

_widget: this 

,因爲你需要上下文已經去了_widget變量。

有時它不可能將上下文保存在一個易於訪問的位置,就像在不直接來自小部件的事件上創建事件處理程序一樣。

Learning To Use the Widget Factory

如果你能得到控制,無論是從一個event.target實例,或從控件的ID,你可以調用jQuery對象上。數據()函數,傳遞的名稱小部件。但是,在小部件的名稱中使用短劃線而不是點。

var $control = $('#' + myControlId); 
var $widget = $control.data("my-widget"); 
$widget.getFoo();