当只有一个项目时,如何使listBox触发处理程序?

时间:2013-04-21 17:32:14

标签: google-apps-script

这是一个演示我遇到的问题的脚本(test online here

var lbArray1 = ['item1', 'item2', 'item3', 'item4', 'item5'];

function doGet(e){
  var app = UiApp.createApplication();
  var vPanel = app.createVerticalPanel().setStyleAttribute('padding','20px')
  app.add(vPanel);
  var lb1 = app.createListBox().setName('lb1').setId('lb1').setVisibleItemCount(1);
  var lb2 = app.createListBox().setName('lb2').setId('lb2').setVisibleItemCount(4);
  var lb3 = app.createListBox().setName('lb3').setId('lb3').setVisibleItemCount(1);
  lb3.addItem(lbArray1[0]);
    for(var i in lbArray1){
      lb1.addItem(lbArray1[i]);
      lb2.addItem(lbArray1[i]);
      }
  var msg = app.createLabel('waiting for trigger').setId('msg');
  vPanel.add(lb1).add(lb2).add(lb3).add(msg);
  var Handler = app.createServerHandler('test').addCallbackElement(vPanel);
  lb1.addChangeHandler(Handler);
  lb2.addClickHandler(Handler);
  lb3.addClickHandler(Handler);// I tried different trigger modes without success
  return app;
}

function test(e){
  var app = UiApp.getActiveApplication();
  var msg = app.getElementById('msg');
  msg.setText('triggered by '+e.parameter.source)
  return app;
}

ListBox 3只有一个项目,只显示一个项目(我在应用程序中有这种情况,使用弹出窗口显示文件夹内容,同时调整列表大小到其内容,有时我只能有一个文件一个文件夹)

ListBox 3永远不会触发处理程序,除非我将setVisibleItemCount更改为2或更多...

我用来调整列表大小的代码就像这样:

...
ODlist.setVisibleItemCount(numItem > 6 ? 6 : numItem > 1 ? numItem : 2)
...

我真的更愿意将最后一个数字设置为1,它看起来会很好看;-)但我不能。

任何变通办法?


编辑:现在我发现使用lb3.addMouseOverHandler(Handler);是一个可用的解决方案,但是当多个项目可见时,这个处理程序会导致一些问题......我宁愿找到更优雅的东西。

1 个答案:

答案 0 :(得分:1)

我理解这是不是你想要的,但这是我解决问题的方法。我只是添加了一个列表项,它是一个用户提示符:“选择一个电子表格”。从我的代码:

var files = DocsList.getFolder("Incoming Product Data").getFiles();
fileChooser.addItem("Select a Spreadsheet"); 
 for (var i = 0; i < files.length; i++) {
    fileChooser.addItem(files[i].getId());

我唯一需要做的就是在触发器中构建一个if语句,这样如果有人选择了一个文件,然后切换回提示“选择一个电子表格”,它不会引发错误尝试将提示作为实际fileId处理。

我能做的最好。