Apps脚本GUI和createClientHandler

时间:2013-01-06 00:23:33

标签: google-apps-script gui-builder

我正在尝试使用客户端处理程序来验证条目,以确保该条目确实是一个数字。因此,如果条目包含一个字母,那么我想禁用一个按钮,以便用户无法继续。我使用GUI构建器构建了一个GUI,但是如果从GUI调用,则客户端处理程序(特别是validateNotNumber)不起作用。

到目前为止,对于一个文本框,我试图让验证器工作,我在GUI构建器中有ID(Base)= Name(输入字段),对于Events部分,我有“on Key Press “填写了具有客户端处理程序的函数的名称和文本框所在表单的名称(在我的例子中,AbsolutePanel1)。

调用的函数是:

function isitnotnumbers(e) {
var app = UiApp.getActiveApplication();
app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer'))
.forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false);
return app;
}; 

该功能确实被称为我已经通过在文本框中按下键时显示消息来测试它。但是,当按下非数字键时,指定的按钮不会被禁用。

我发现的示例列出了手工编写的UI小部件中的验证器,因此我不确定在使用GUI构建器时我的错误。

那么,我哪里出错了,我该如何解决这个问题呢? 如果GUI构建器对客户端处理程序有限制(例如使用HTML服务),是否有解决方法?

我的其他尝试:

我试图在文本框中添加一个点击处理程序,这是对上面代码的修改:

var app = UiApp.getActiveApplication();  
var handlernumbers = app.createClientHandler()
    .forTargets(app.getElementById('LabelUserMessage'))
    .setText('THe message');
var odobox = app.getElementById('ThisOdometer');
odobox.addClickHandler(handlernumbers);
return app;

2 个答案:

答案 0 :(得分:1)

试试这个:

function isitnotnumbers(e) {
var app = UiApp.getActiveApplication();
app.getElementById('ThisOdometer').addKeyUpHandler(app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer'))
.forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false));
return app;
};

编辑: 您不需要在单独的函数中使用此代码,只需将以下行添加到doGet()或main函数中(以便在应用程序启动时仅创建一次处理程序):

app.getElementById('ThisOdometer').addKeyUpHandler(app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer'))
    .forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false));

答案 1 :(得分:0)

要回答我自己的问题,我会说谷歌贬低gui建设者并不重要,并且在9月之后将停止运作。

我应该,或者我应该开始学习uiservice或htmlservice。