我认为您不能使用 ClientHandlers 来做到这一点。您当然可以使用 ServerHandlers。给猫剥皮的方法不止一种,但这很管用,所以玩一下这样的东西。在这里,我使用了两种不同的 ServerHandler,一种用于 TextBox,一种用于 Button,并将它们通过管道传递给一个通用的 doAction 函数。您当然可以为它们都使用一个处理程序,但这会增加每个 keyUp 事件发送到服务器的开销,甚至在您知道它是一个有效数字之前。
// Script-as-app template.
function doGet() {
var app = UiApp.createApplication();
var textbox = app.createTextBox().setName('textbox');
app.add(textbox);
var button = app.createButton('Click Me');
app.add(button);
var label = app.createLabel('___').setId('lbl');
app.add(label);
// only fire ServerHandler for onKeyUp if it passees validation
var textBoxHandler = app.createServerHandler('textBoxHandlerFunction').validateNumber(textbox);
var buttonHandler = app.createServerHandler('buttonHandlerFunction');
textBoxHandler.addCallbackElement(textbox);
buttonHandler.addCallbackElement(textbox);
textbox.addKeyUpHandler(textBoxHandler);
button.addClickHandler(buttonHandler);
return app;
}
function textBoxHandlerFunction(e) {
var app = UiApp.getActiveApplication();
if(e.parameter.keyCode == 13)
{
app = doAction(app, e);
}
return app;
}
function buttonHandlerFunction(e) {
// missing validation that textbox is a number
return doAction(UiApp.getActiveApplication(), e);
}
function doAction(app, e)
{
// do your stuff
app.getElementById('lbl').setText('fired...' + e.parameter.textbox);
return app;
}