2015-05-11 42 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 
} 
相关问题