处理类中的事件(Prototype)

时间:2013-11-26 01:39:30

标签: javascript event-handling google-apps-script prototype google-docs-api

我正在重写这个问题,以便更容易回答(我希望)。我希望在类(原型)中有一个Button,但我希望处理程序也在类中。如果处理程序在类之外但在内部找不到它,则工作正常。

提前感谢您的帮助。

function myWindow(message) {  
  this.SS = SpreadsheetApp.getActiveSpreadsheet(); 
  this.App = UiApp.createApplication();
  this.App.setTitle(message);
  this.Panel = this.App.createVerticalPanel();
  this.App.add(this.Panel);
  this.Button = this.App.createButton('OK', this.App.createServerHandler('handler'));
};

myWindow.prototype = {
  constructor: myWindow,
  handler: function (e) 
  {
    Browser.msgBox('Click');
  },
  show: function()
  {
    this.Panel.add(this.Button);
    this.SS.show(this.App);
  }
};

function Run() {
  var theWindow = new myWindow('Hello World');
  theWindow.show();
}

单击“确定”按钮时出现的错误是“未找到脚本函数处理程序”

1 个答案:

答案 0 :(得分:0)

好的我已经做了很多阅读,虽然没有明确说明,但似乎createServerHandler只是为全局函数设计的,而UIAPP中没有提供任何其他功能。这意味着我所要求的是无法完成的。

解决方案必须看起来像

function myWindow(message) {  
  this.SS = SpreadsheetApp.getActiveSpreadsheet(); 
  this.App = UiApp.createApplication();
  this.App.setTitle(message);
  this.Panel = this.App.createVerticalPanel();
  this.App.add(this.Panel);
  this.Button = this.App.createButton('OK', this.App.createServerHandler('handler'));
}

myWindow.prototype = {
  constructor: myWindow,
  show: function() {
    this.Panel.add(this.Button);
    this.SS.show(this.App);
  }
};

function handler(e) {
  Browser.msgBox('Click');    
  };

function Run() {
  var theWindow = new myWindow('Hello World');
  theWindow.show();
};

这不是闪光但可行。