Google apps script 谷歌应用程序脚本-回调混乱
我对以下代码示例的行为感到困惑。 为什么我不能通过app对象访问回调中的statusLabelU 它在论点中可用 顺便问一下,回调中参数变量e的类型是什么Google apps script 谷歌应用程序脚本-回调混乱,google-apps-script,Google Apps Script,我对以下代码示例的行为感到困惑。 为什么我不能通过app对象访问回调中的statusLabelU 它在论点中可用 顺便问一下,回调中参数变量e的类型是什么 function doGet() { var app = UiApp.createApplication(); var button = app.createButton('Enter Symbol'); app.add(button); var symbolText = app.createTextBox().setNa
function doGet() {
var app = UiApp.createApplication();
var button = app.createButton('Enter Symbol');
app.add(button);
var symbolText = app.createTextBox().setName('symbolText').setId('symbolText');
app.add(symbolText);
var labelU = app.createLabel('Unknown symbol U')
.setId('statusLabelU');
var labelK = app.createLabel('Unknown symbol K')
.setId('statusLabelK');
app.add(labelU);
app.add(labelK);
var handler = app.createServerHandler('myClickHandler');
handler.addCallbackElement(symbolText);
button.addClickHandler(handler);
return app;
}
function myClickHandler(e) {
var app = UiApp.getActiveApplication();
var symU = app.getElementById('symbolText');
var symK = e.parameter.symbolText;
var financeU = FinanceApp.getStockInfo(symU);
var financeK = FinanceApp.getStockInfo(symK);
var label = app.getElementById('statusLabelU');
label.setText(financeU.name);
var label = app.getElementById('statusLabelK');
label.setText(financeK.name);
app.close();
return app;
}
实际上,您可以通过app对象访问回调中的statusLabelU。除了通过addCallbackElement将文本框作为参数传递给事件处理程序(您也可以将容器传递给addCallbackElement,然后将此容器中的所有元素传递给事件处理程序)之外,您无法访问文本框的内容(至少我不知道任何方法)。那么,在您的示例中发生了什么:
var symU = app.getElementById('symbolText');
返回文本框的一种代理,当转换为字符串“Generic”时返回
FinanceApp.getStockInfo('Generic');
然后依次返回undefined,如果您运行,它将被设置为标签statusLabelU的文本。
labelU.setName('labelU');
handler.addCallbackElement(labelU);
您将能够访问回调中标签的值,如下所示:
var value = e.parameter.labelU;
参数“e”(或“eventInfo”)包含有关如何触发回调的信息。这里有一些关于用户ID、光标的x/y位置以及触发回调的源元素的一般信息。除此之外,显式添加到处理程序的小部件的值可以作为参数访问。您可以通过执行
Logger.log(e)
并从编码环境(cmd/ctrl+return)中查看日志。是的,我花了一段时间才明白发生了什么。我最终的理解是: 服务器处理内容,然后向客户端提供UI。每次客户端做一些事情,比如单击按钮,他都会将这些内容提交给服务器,但是服务器已经记不起以前做过什么,所以在向客户端提供UI之前所做的所有变量,它不再知道 因此,如果您希望服务器在为客户机提供服务之前记住它创建的那些值,那么您需要将它们与发送给客户机的UI一起嵌入,以便在客户机执行某项操作时,将数据发送回服务器 这个嵌入的垃圾被认为是一个隐藏的回调元素,用户不会与之交互,只是在下一个处理操作期间将其传递回服务器。“普通”回调元素是服务器还不知道的数据,例如表单元素(名称、地址等)。一旦用户点击提交按钮进行处理,它就需要知道这些信息,所以它被称为回调信息