【问题标题】:nested listbox google apps script嵌套列表框谷歌应用脚​​本
【发布时间】:2012-12-24 18:16:19
【问题描述】:

我试图解决在 GAS 中创建嵌套列表框的可能性。我创建了一些数组来填充列表框,并使用 for 循环将它们连接到各自的列表框。

数组

var TicketTypeArray=["TICKETTYPE1","TICKETTYPE2","TICKETTYPE3","TICKETTYPE4","TICKETTYPE5","TICKETTYPE6","TICKETTYPE7","TICKETTYPE8","TICKETTYPE9","TICKETTYPE10","TICKETTYPE11","TICKETTYPE12","TICKETTYPE13","TICKETTYPE14"];
var DemandedByArray=["DEMANDEDBY1","DEMANDEDBY1"];
var AnalystArray=["ANALYST1","ANALYST2","ANALYST3","ANALYST4","ANALYST5","ANALYST6","ANALYST7","ANALYST8","ANALYST9"];
var StatusType1Array=["STATUS1","STATUS2","STATUS3"];
var StatusType2Array=["STATUS1","STATUS2","STATUS3"];
var StatusType3Array=["STATUS1","STATUS2","STATUS3"];

我正在尝试使用 if else 循环将下一个列表框嵌套到另一个列表框:

if (TicketTypeListBox="TICKETTYPE1")
{
  for(var i=0; i<StatusType1Array.length; i++)
  {
    StatusListBox.addItem(appRegistro.createLabel(StatusType1Array[i])).setItemText(i, StatusType1Array[i]);
  }
}
  else if (TicketTypeListBox="TICKETTYPE2")
  {
    for(var i=0; i<StatusType2Array.length; i++)
    {
      StatusListBox.addItem(appRegistro.createLabel(StatusType2Array[i])).setItemText(i, StatusType2Array[i]);
    }
  }
  else
  {
    StatusListBox.addItem("Teste");
  }

TicketTypeListBox 是:

var TicketTypeListBox = appRegistro.createListBox().setId('TicketType').setName('TicketType');
for(var i=0; i<TicketTypeArray.length; i++)
{
  TicketTypeListBox.addItem(appRegistro.createLabel(TicketTypeArray[i])).setItemText(i, TicketTypeArray[i]);
}

要显示面板,我使用代码:

panel.add(DataLabel);
panel.add(DataTextBox);
panel.add(TicketIDLabel);
panel.add(TicketIDTextBox);
panel.add(TicketTypeLabel);
panel.add(TicketTypeListBox);
panel.add(DemandedByLabel);
panel.add(DemandedByListBox);
panel.add(AnalystLabel);
panel.add(AnalystListBox);
panel.add(StatusLabel);
panel.add(StatusListBox);

appRegistro.add(panel);
return appRegistro

现在,当我在 Google 协作平台中运行脚本时,我收到错误消息“找不到方法添加(字符串)”。在调试时,它会在 TicketTypeListBox 的行中定位错误。

panel.add(TicketTypeListBox);

我能做什么?

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    出现此错误是因为在if 块中,您使用了赋值运算符而不是相等比较器,它将字符串分配给列表框。 而不是

    if (TicketTypeListBox = "ACCESS CONTROL")
    

    使用

    if (TicketTypeListBox == "ACCESS CONTROL")
    

    其他地方也同样修改。

    我很确定它仍然无法工作,因为列表框无法与字符串进行比较。要创建嵌套列表框,您必须在 lisboxes 上使用更改处理程序。下面是一个简单的例子。

    var lbArray1 = ['item1', 'item2', 'item3'];
    var item1Array = ['item11', 'item12', 'item13'];
    var item2Array = ['item21', 'item22', 'item23'];
    var item3Array = ['item31', 'item32', 'item33', 'item34'];
    
    function doGet(e){
      var app = UiApp.createApplication();
    
      var vPanel = app.createVerticalPanel();
      app.add(vPanel);
    
      var lb1 = app.createListBox().setName('lb1').setId('lb1');
      for(var i in lbArray1){lb1.addItem(lbArray1[i])};
      var lb2 = app.createListBox().setName('lb2').setId('lb2');
      //load the 2nd lb with items dependent on first one
      for(var i in item1Array){lb2.addItem(item1Array[i])};
      vPanel.add(lb1).add(lb2);
    
      //use change handler to dynamically change the 2nd listbox based on the selection of first listbox
      var changeHandler1 = app.createServerHandler('updateListBox_').addCallbackElement(vPanel);
      lb1.addChangeHandler(changeHandler1);
    
      return app;
    }
    
    function updateListBox_(e){
      var app = UiApp.getActiveApplication();
      //first listbox item selected
      var lb1Item = e.parameter.lb1;
    
      var lb2 = app.getElementById('lb2');
      lb2.clear();//remove all items from lb2
    
      if(lb1Item == 'item1'){
        for(var i in item1Array){lb2.addItem(item1Array[i])};
      }
      else if(lb1Item == 'item2'){
        for(var i in item2Array){lb2.addItem(item2Array[i])};
      }
      else if(lb1Item == 'item3'){
        for(var i in item3Array){lb2.addItem(item3Array[i])};
      }
    
      return app;
    }
    

    【讨论】:

    • 感谢您的帮助,但似乎代码没有获取列表框的值。当我更改第一个列表框中的项目时,第二个列表框变空。代码'var TicketTypeLBItem = e.parameter.TicketType;'正在获取列表框的类型,而不是其值。
    • 您可能在某处犯了错误...Waqar Ahmad 的代码按预期工作。您应该检查您使用的小部件名称是否拼写正确
    • @Sergeinsas 你是对的,我做错了...再次替换所有内容,使用 ctrl+F 将变量替换为我自己的声明,现在运行良好!
    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多