0

我对以下代码示例的行为感到困惑。为什么我不能通过 app 对象在回调中访问 statusLabelU ?

它在参数中可用

顺便说一句,回调中参数变量 e 的类型是什么?

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;
}
4

3 回答 3

1

如果你跑

labelU.setName('labelU');
handler.addCallbackElement(labelU);

您将能够像这样访问回调中标签的值:

var value = e.parameter.labelU;

参数“e”(或“eventInfo”)包含有关如何触发回调的信息。有一些关于用户 ID、光标的 x/y 位置以及触发回调的源元素的一般信息。除此之外,显式添加到处理程序的小部件的值将作为参数访问。您可以随时查看内容

记录器.log(e);

并从编码环境(cmd/ctrl + return)中查看日志。

于 2014-10-05T05:40:12.987 回答
0

实际上,您可以通过 app 对象在回调中访问 statusLabelU。除了通过 addCallbackElement 将它作为参数传递给事件处理程序之外,你不能做什么(至少我不知道任何方式)来访问 TextBox 的内容(你也可以将容器传递给 addCallbackElement,然后将所有元素传递给这个容器传递给您的事件处理程序)。那么在您的示例中会发生什么:

var symU = app.getElementById('symbolText');

返回文本框的一种代理,当转换为字符串“通用”时返回。

FinanceApp.getStockInfo('Generic');

然后依次返回未定义,然后将其设置为标签 statusLabelU 的文本。

于 2012-12-28T11:38:01.913 回答
0

是的,我花了一段时间才明白发生了什么。我最终理解的方式是这样的:

服务器处理东西,然后向客户端提供 UI。每次客户端做某事,比如点击一个按钮,他都会把这些东西提交给服务器,但是服务器不记得它之前做了什么,所以你在向客户端提供 UI 之前所做的所有这些变量,它不再知道。

因此,如果您希望服务器在为客户端提供服务之前记住它创建的那些值,那么您需要将它们与发送给客户端的 UI 一起嵌入,以便当他执行某些操作时,数据会被发送回服务器。

该嵌入的废话被认为是隐藏的回调元素,用户不与之交互的东西,并且仅用于在下一个处理操作期间将其传递回服务器。“正常”回调元素是服务器还不知道的数据,例如表单元素(姓名、地址等)。一旦用户点击提交按钮来处理它,它就需要知道这个信息,所以这就是为什么它被称为回调信息。

于 2015-02-28T15:09:02.377 回答