2011-05-19 133 views
3

我有這樣麻煩的jQuery插件

$.widget("ui.myWidget", { 
    //default options 
    options: { 
     myOptions: "test" 
    }, 
    _create: function() { 
     this.self = $(this.element[0]); 
     this.self.find("thead th").click(function() { 
      this.self._headerClick(); //how do I do this!!! 
     }); 
     this.self._somethingElse(); 
    }, 
    _headerClick: function(){ 
    }, 
    _somethingElse: function(){ 
    }, 
. 
. 
. 

this.self._headerClick();一個widget拋出一個錯誤。這是因爲在這種情況下this是被點擊的th元素。我如何獲得對_headerClick函數的引用?

回答

6

商店的範圍。

$.widget("ui.myWidget", { 
    //default options 
    options: { 
     myOptions: "test" 
    }, 
    _create: function() { 
     var that = this; // that will be accessible to .click(... 
     this.self = $(this.element[0]); 
     this.self.find("thead th").click(function() { 
      that._headerClick(); //how do I do this!!! 
     }); 
     this.self._somethingElse(); 
    }, 
    _headerClick: function(){ 
    }, 
    _somethingElse: function(){ 
    }, 
+0

你不需要做'that._somethingElse();'?我不認爲'this.self._somethingElse();'會觸發。 – 2011-05-19 17:03:36

+0

是的,我剛剛意識到之前,我簡化了這個例子,所以你不會因爲無關緊要的代碼而頭痛,我搞砸了。 – kralco626 2011-05-19 17:07:29

2

未經檢驗的,但也許是這樣的:一個變量中所需this

_create: function() { 
    var self = this, 
     $elem = $(self.element[0]); 

    $elem.find("thead th").click(function() { 
     self._headerClick(); 
    }); 

    self._somethingElse(); 
},