2013-05-12 72 views
0

我似乎無法在我的單擊事件中獲取打字稿類實例。如何從Kinetic.js單擊事件獲得類訪問

我有一個TypeScript類Navigation

class Navigation 
{ 
    currentPage: number; 

    wireMouseEvents() 
    { 
     this.buttonPrevious.on("click", function(): void { 
      if (this.currentPage > 1) 
      { 
       // do more work with Navigation objects 
      } 
     }); 
    } 
} 

而這正是導致的JavaScript:

Navigation.prototype.wireMouseEvents = function() { 
    var _this = this; 
    this.buttonPrevious.on("click", function() { 
     if(_this.currentPage > 1) { 
      // do more work with Navigation objects 

     } 
    }); 
}; 

該事件被觸發,但currentPage是不確定的。 在調試器的點擊事件中查看「this」時,它是一個Kinetic.Text對象。

如何確保點擊處理程序的範圍是我的類Navigation

+1

您是否可以粘貼生成的JavaScript? – thomaux 2013-05-13 12:27:02

+0

Navigation.prototype.wireMouseEvents = function(){ var _this = this; (「click」,function(){if(_this.currentPage> 1){} }); – mrs99mrs99 2013-05-13 17:09:52

+0

謝謝,我標記了刪除的答案,因爲它不應該是一個答案:)。我不確定我能爲你回答,但至少現在更清楚了。 – thomaux 2013-05-14 06:42:39

回答

0

您發佈的手稿不會編譯爲您發佈的JavaScript。 this.buttonPrevious.on("click", function(): void {等不會產生_this以維護詞彙範圍。只有this.buttonPrevious.on("click",() => {會這樣做。見here

您需要使用脂肪箭頭功能保持範圍:

class NavigationWithFatArrow 
{ 
    currentPage: number; 

    wireMouseEvents() 
    { 
     this.buttonPrevious.on("click",() => { 
      if (this.currentPage > 1) 
      { 
       // do more work with Navigation objects 
      } 
     }); 
    } 
} 

您可能還需要嘗試在構造函數結合,以確保您始終獲得正確的「本」。請參閱Ryan Cavanaugh的答案:https://stackoverflow.com/a/16029714/1014822

+0

我不知道爲什麼它不匹配我從VS2012複製。嗯。感謝您的建議;我今天早上看看它。 – mrs99mrs99 2013-05-14 12:38:47

+0

胖箭頭有同樣的問題。 currentPage是未定義的。我會看看下一步綁定構造函數。 – mrs99mrs99 2013-05-14 12:42:24

+0

JcFx:感謝您的幫助;我有它的工作。拋出我的一件事是,當我在點擊功能時,所有的類變量都說未定義,並且我停止了代碼b/c,我認爲出了問題。但是,如果我繼續並逐步採用類方法,則會定義變量。 – mrs99mrs99 2013-05-14 16:14:20