此问题是“Is 'chaining' functions available in GAS?。”
的扩展我需要做类似的事情......复制/粘贴回答上一个问题的代码示例:
var app = null;
function firstHandler(e) {
if( app == null )
app = UiApp.getActiveApplication();
//do your thing
//now, instead "return app;" you return the second handler
return secondHandler(e);
}
function secondHandler(e) {
if( app == null )
app = UiApp.getActiveApplication();
//do your job
return app;
}
其中firstHandler()是按钮的单击处理程序。这个例子与我需要做的事情之间的区别在于,在我的例子中,secondHandler()需要从表单中提取一条信息。具体来说,我需要从列表框中获取所选值。
通常情况下,我将secondHandler()拉入该信息的方式是将包含列表框的父对象传递给函数,然后有一行如下:
var value = eventInfo.parameter.listBoxName;
但是,我无法将列表框所在的网格传递给secondHandler()。这是我尝试过的:
var app = null;
function firstHandler(e) {
if( app == null )
app = UiApp.getActiveApplication();
//do your thing
//get the object now, pass it into the chained function
var myGrid = app.getElementById("gridId");
return secondHandler(myGrid);
}
function secondHandler(e) {
if( app == null )
app = UiApp.getActiveApplication();
var value = e.parameter.listBoxName.toString();
//do your job
return app;
}
但这没有奏效。我也尝试将secondHandler()修改为完全无参数,这样我就可以绕过必须将网格传递给firstHandler()中的secondHandler():
var app = null;
function firstHandler(e) {
if( app == null )
app = UiApp.getActiveApplication();
//do your thing
return secondHandler(e);
}
function secondHandler(e) {
if( app == null )
app = UiApp.getActiveApplication();
var value = app.getElementById('listBoxId').value;
//do your job
return app;
}
这不起作用......“app.getElementById('listBoxId')。value”似乎没有返回任何内容。我不明白为什么不:(
有关我如何做到这一点的任何想法?任何人都知道为什么我的app.getElementById变通方法没有按预期运行?任何和所有帮助赞赏!!!
答案 0 :(得分:0)
试试这个。
function firstHandler(e) {
var app = UiApp.getActiveApplication();
//do your thing
return secondHandler(e);
}
function secondHandler(e) {
var app = UiApp.getActiveApplication();
var value = e.parameter.listBoxName;
//do your job
return app;
}
确保在创建处理程序时使用此功能。
app.createServerHandler("firstHandler").addCallbackElement(gridContainingListBox);
如果您要从页面中检索值,则 可以使用e.parameter
,这是在添加正确的回调元素时正确设置的。如果您要在UI中修改元素,那么您当然可以使用app.getElementById(...).whateverFunction()
,但请注意,您无法调用getValue()
等。