0

这是一个演示我遇到的问题的脚本(在这里在线测试

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,它看起来会很好 ;-) 但我不能。

任何解决方法的想法?


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

4

1 回答 1

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。

我能做的最好的。

于 2013-04-21T18:46:14.160 回答