图像在过程完成后加载,并在此之后保留

时间:2013-05-05 05:30:02

标签: google-apps-script

我的代码如下。它将接受来自输入文本的数据;然后它将从谷歌电子表格中的stackoverflow(基于输入)中获取最新的最新提要。

我已经(想要)设置一个外部gif图像,以便在获取rss feed时显示为进度指示器,并且正在进行处理。

问题是:当我删除评论的部分; gif图像将永远不会被用户看到,并且当它仍然作为评论时;应用程序在完成此过程后加载该gif图像,然后保留

我希望它只在进程(获取rss和处理它)的过程中才可见。那么有什么办法可以实现吗?

function stackoverflow(){   
    var app =UiApp.createApplication().setHeight(380).setWidth(800);   
    app.setTitle("Enter tag name");
    var mydoc=SpreadsheetApp.getActiveSpreadsheet();    
    var txtBox = app.createTextBox().setFocus(true).setWidth("150").setId("ticker").setName("ticker");
    var mainpanel = app.createHorizontalPanel().setId('mainpanel');
    mainpanel.add(txtBox);
    var subbtn = app.createButton("Get posts!").setId("tick").setWidth("80");
    mainpanel.add(subbtn);
    var myloadingimg=app.createImage("http://schedule.msu.edu/img/InProgress.gif").setHeight("26").setWidth("26").setId("loadingimg");
    mainpanel.add(myloadingimg.setVisible(false));
    app.add(mainpanel);
    var panel = app.createVerticalPanel().setId('panel');    
    var submitHandler = app.createServerHandler("clicker").addCallbackElement(mainpanel);
    subbtn.addClickHandler(submitHandler);
    app.add(panel);
    mydoc.show(app);
}
function clicker(e){
   var app = UiApp.getActiveApplication();
   var txtBox = app.getElementById("ticker");
   app.getElementById("loadingimg").setVisible(true);
   var panel=app.getElementById("panel");
   app.remove(1);
   var panel = app.createVerticalPanel().setId('panel');    
   var stackurl = "http://stackoverflow.com/feeds/tag?tagnames="+e.parameter.ticker+"&sort=newest";
   var stackXML = UrlFetchApp.fetch(stackurl).getContentText();
   var stackDOC = Xml.parse(stackXML, false);
   var stackentry = stackDOC.getElement().getElements('entry');

   for (var i = 0; i < stackentry.length; i++) {    
       var result = stackentry[i];
       panel.add(app.createHTML("<br><b>Post Title: </b>"+ result.getElement('title').getText()+"<br>"));
       panel.add(app.createAnchor('', '') .setText("Post URL").setHref(result.getElement('link').getAttribute('href').getValue()));       
       panel.add(app.createHTML("<br>"));
      }

   var scroll = app.createScrollPanel().setPixelSize(760, 280);
   scroll.add(panel);
   app.add(scroll);
   //app.getElementById("loadingimg").setVisible(false);
   return app;
}

function onOpen() 
{  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({name:'stackoverflow',functionName:'stackoverflow'});
  ss.addMenu("f2", menuEntries);
}

1 个答案:

答案 0 :(得分:2)

您可以使用适用于此类情况的clientHandler。

function stackoverflow(){   
    ...   
    var clientHandler = app.createClientHandler().forTargets(myloadingimg).setVisible(true); 
    var submitHandler = app.createServerHandler("clicker").addCallbackElement(mainpanel);
    subbtn.addClickHandler(submitHandler).addClickHandler(clientHandler); 
    ...
}
function clicker(e){
   var app = UiApp.getActiveApplication();
   ....
   app.getElementById("loadingimg").setVisible(false);
   return app;
}