0

我在编写一个让用户与数据表交互的脚本时正在做什么。用户选择的每个系列都会创建一个按钮,然后将系列绘制在图表上。如果用户单击按钮,它会显示系列。那里的所有数据都存储在一个隐藏的 JSON 字符串中。用户要查看的列或系列存储在我称为索引的数组中,它也是一个隐藏的 JSON 字符串)每个按钮都连接到其自己的客户端处理程序,该处理程序具有

.forTargets(the index i was talking about).setTag(to the corresponding column in the data array) 

并且它们都连接到同一个服务器处理程序。因此,当单击按钮时,客户端处理程序会将索引的标签设置为应该删除的系列。现在服务器处理程序将运行它,通过 ID 获取索引并获取标签。这是它出错了。标签始终为空。

我尝试的第一件事是查看我的客户端处理程序是否工作不正常。所以我将索引的标签设置为某个数字,但服务器处理程序中的 getTag 方法仍然返回 null。

idk,但也许标签没有保存在 UI 实例中?

下面是服务器处理程序的第一位。

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(); 
4

2 回答 2

2

我认为您遇到的问题与时间更相关:同时调用处理程序,这对于客户端和服务器处理程序也是如此,这意味着如果客户端处理程序更改隐藏标记值,则此更改对于服务器处理程序来说太晚了功能来“看到”它。您应该做的是创建一个单独的按钮来触发用户在设置所有其他参数后将使用的服务器处理程序。在用于获取radioButtons 值的已知解决方法中使用了相同的方法

另外,为什么要在隐藏的小部件上使用标签?您可以通过直接访问来使用它,setValue()因为e.parameter.hiddenName它们本质上已经是不可见的......?

另请注意,您可以在客户端处理程序中设置一个值,只要这些值是在 Ui 实例(do Get 函数)内通过常量变量或由同一函数中的另一个客户端处理程序定义的,如前面提到的示例所示单选按钮......但这只是一个细节。在这种情况下,如果您需要获取小部件值(在 doGet 函数内),您当然应该使用getValue()来获取小部件值,因为此时 noe.parameter可用。

我希望我已经足够清楚了,重新阅读我不太确定,但是....只是问是否缺少某些东西;-)

于 2012-08-18T11:54:29.750 回答
1

标签值通过参数传递给处理程序。在这篇文章中,这个事实被详细解释了。

于 2012-08-17T19:43:20.597 回答