2015-05-11 86 views
0

我有一個具有可擴展轉換(用於顯示新數據面板時使用)的插件。它配備了默認的過渡方法:如何將類方法分配給默認屬性(即,來自靜態範圍的參考非靜態方法)

  • 「無」 - 只需更換數據
  • 「幻燈片」 - 滑出現有的面板和幻燈片在新一
  • 「變臉」 - 淡出現有面板然後在新的

的各種過渡方法都存在作爲我的默認選項transitions財產的性質淡化對象:

module MyPlugins 
{ 
    export class MyPlugin 
    { 
     static defaultOptions = 
     { 
      // Transition methods - can be extended to add new transitions 
      transitions: 
      { 
       none: function (transition): JQueryPromise<any> 
       { 
        return transition.$panel.toggle(transition.inward).promise(); 
       }, 
       slide: function (transition: TransitionEventParams): JQueryPromise<any> 
       { 
        return this._slide(transition); 
       }, 
       fade: function (transition: TransitionEventParams): JQueryPromise<any> 
       { 
        return this._fade(transition); 
       } 
      } 
     } 

     // Greatly simplified example class method 
     private _fade(transition: TransitionEventParams): JQueryPromise<any> 
     { 
      var $panel = transition.$panel; 
      if (transition.inward) 
      { 
       return $panel.fadeIn(transition.duration).promise(); 
      } 
      else 
      { 
       return $panel.fadeOut(transition.duration).promise(); 
      } 
     } 
    } 
} 

在運行時的過渡方法是通過名稱調用,使用插件作爲當前this

promise = this.o.transitions[transition].call(this, transitionParams); 

現在我的問題是:是否有可能引用類的方法,從靜態的默認值,因此不需要匿名函數包裝器

eg我希望能有這樣的:

static defaultOptions = 
{ 
    // Transition methods - can be extended to add new transitions 
    transitions: 
    { 
     ... 
     slide: MyPlugin._slide, 
     fade: MyPlugin._fade 
    } 

但我想不出如何引用非靜態類的方法,除了通過名稱(例如object["methodname"].call(this, params)),從靜態對象。

關於如何簡化我的默認選項的任何想法?我應該只是讓輔助方法也是靜態的,因爲插件的價值是this

+0

你可以試試'MyPlugin.prototype._slide' - 其靜態訪問「實例」方法 – Bergi

+0

@Bergi。這是有道理的,應該發生在我身上。 Do'h!試試看吧:) :) –

+0

@Bergi:完美。作品一種享受。請張貼答案讓我接受。 –

回答

1

你應該能夠靜態地訪問原型的「實例」的方法,如

transitions: { 
    … 
    slide: MyPlugin.prototype._slide, 
    fade: MyPlugin.prototype._fade 
} 
相關問題