我正在编写一个允许用户与数据表交互的脚本。用户选择的每个系列都会创建一个按钮,然后在图表上绘制系列。如果用户单击按钮,则将该系列放入房间。所有数据都存储在隐藏的JSON字符串中。用户要查看的列或系列存储在一个我称为索引的数组中,它也是一个隐藏的JSON字符串)每个按钮都连接到它自己的客户端处理程序,它有一个
.forTargets(the index i was talking about).setTag(to the corresponding column in the data array)
并且它们都连接到同一个服务器处理程序。因此,当单击该按钮时,客户端处理程序会将索引的标记设置为应该删除的系列。现在服务器处理程序将运行它按ID获取索引并获取标记。这是错的。标签始终为空。
我尝试的第一件事是看我的客户端处理程序是否工作不正常。所以我将索引的标记设置为某个数字,但Server处理程序中的getTag方法仍然返回null。
idk,但也许标签不会保存在UI实例中?
以下是Server处理程序的第一位。
function clickServer(e) {
e = e.parameter;
var app = UiApp.getActiveApplication();
var master = JSON.parse(e.dataTable, "reviver");
var index = JSON.parse(e.index, "reviver");
var hidden = app.getElementById("hiddenIndex");
var tag = hidden.getTag();
答案 0 :(得分:2)
我认为你遇到的问题与时间更相关:处理程序同时被调用,对于客户端服务器处理程序也是如此,这意味着如果客户端处理程序更改了隐藏的标记值,则此更改发生得太晚服务器处理程序函数'看'它。你应该做的是创建一个单独的按钮来触发用户在设置的所有其他参数之后使用的服务器处理程序。 在用于获取radioButtons value
的已知解决方法中使用了这种相同的方法另外,为什么要在隐藏的小部件上使用标签?您可以通过setValue()
和e.parameter.hiddenName
直接访问它,因为它们本质上已经不可见了吗?
另请注意,只要通过常量变量或同一函数中的其他客户端Handler在Ui实例(do Get函数)中定义这些值,就可以在客户端处理程序中设置一个值,如前所示提到了radioButtons的例子......但这只是一个细节。
在此上下文中,如果您需要获取窗口小部件值(在doGet函数内),您当然应该使用getValue()
来获取窗口小部件值,因为此时没有e.parameter
可用。
我希望我已经足够清楚了,重读这个我不太确定但......只是问一下是否缺少某些东西; - )
答案 1 :(得分:1)
标签值通过参数传递给处理程序。在此post中,详细解释了这一事实。