0

我希望按下按钮时的脚本立即改变它的颜色,但实际上它是在 copyProject 的脚本完成后改变它的颜色,copyProject 函数大约需要 40 秒

我曾想过拆分处理函数以使其在按下时和运行 copyProject 函数之前改变颜色,有什么想法吗?

 function copyProject(e)
 {
     var app=UiApp.getActiveApplication();
     var button=app.getElementById("button");
     process(app,button);
     var sourceProjectID=e.parameter.id;
     copProject(sourceProjectID);
     return app.close();
 }


 function process(app,button)
 { 
     button.setStyleAttribute("color", "red").setText("Processing");
     return app;  
 }

谢谢

4

2 回答 2

1

这是一个模拟您想要的行为的按钮上的客户端服务器和 serverHandler 的示例:当您单击它时,按钮会改变颜色......在长 serverHandler 函数之后它会显示一条消息。

function doGet(){
  var app = UiApp.createApplication();
  var handler = app.createServerHandler('test');
  var cHandler = app.createClientHandler();
  var btn = app.createButton('click this button').addClickHandler(handler).addClickHandler(cHandler);
  cHandler.forEventSource().setStyleAttributes({'color':'red'})
  app.add(btn);
  return app
}

function test(e){
  var app = UiApp.getActiveApplication();
  app.add(app.createLabel('operation completed'));
  Utilities.sleep(4000);
  return app;
}

现场测试在这里

于 2013-09-30T11:10:23.027 回答
0

处理发生在服务器上,因此它只会在处理完成后重绘应用程序并且您的 UI 将不会响应。

使用 UI 并使其具有响应性的正确方法是使用客户端处理程序,它使您能够即时更新 UI。还要研究验证器,这对于在处理输入之前验证输入很有用,而无需访问服务器。

https://developers.google.com/apps-script/uiapp#ClientHandlers

https://developers.google.com/apps-script/uiapp#Validators

让我知道我是否可以进一步帮助您

于 2013-09-30T09:56:28.350 回答