1

我目前有一个带有下拉问题的 UI。当用户在下拉列表中选择某个答案时,我想显示另一个 UI,允许用户回答更多问题。然后,我想关闭此窗口并将用户返回到第一个 UI 并继续回答问题。

我尝试过弹出面板,将一个 Ui 的不可见性设置为 false,但似乎没有任何效果。

注意:由于我的第一个 UI 中的数据是动态的,因此我无法使用 GUI 构建器,因此请仅使用代码提供解决方案。

这些是我到目前为止的代码:

// when user select this drop down option, show another UI
case 'Move to a special meeting':
  displayActionItemsUI();
  cellStatus.offset(numOfRowsOffset,0).setValue(N);
  cellMeetingType.offset(numOfRowsOffset,0).setValue('Special Meeting');
  break;


function displayActionItemsUI() {

  var app = UiApp.getActiveApplication();

  var panelActionItems = app.createVerticalPanel();

  var gridActionItems = app.createGrid(3, 2).setId('gridActionItems')
      .setCellPadding(15);

  var lblTaskStatement = app.createLabel('Task Statement:');
  var lblOwner = app.createLabel('Owner:');
  var lblDeadline = app.createLabel('Deadline:');

  var tboxTask = app.createTextBox().setId('tboxTask').setName('tboxTask');
  var tboxOwner = app.createTextBox().setId('tboxOwner').setName('tboxOwner');
  var dboxDeadline = app.createDateBox()
      .setFormat(UiApp.DateTimeFormat.DATE_SHORT)
      .setId('dboxDeadline').setName('dboxDeadline');

  gridActionItems.setWidget(0, 0, lblTaskStatement);
  gridActionItems.setWidget(0, 1, tboxTask);

  gridActionItems.setWidget(1, 0, lblOwner);
  gridActionItems.setWidget(1, 1, tboxOwner);

  gridActionItems.setWidget(2, 0, lblDeadline);
  gridActionItems.setWidget(2, 1, dboxDeadline);

  var btnAdd = app.createButton('Add');

  var lblTest = app.createLabel().setId('lblTest').setVisible(false);

  panelActionItems.add(gridActionItems)
    .add(btnAdd).add(lblTest);

  app.add(panelActionItems);

  addHandler = app.createServerHandler('_responseToAdd')
    .addCallbackElement(panelActionItems);

  btnAdd.addClickHandler(addHandler);

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.show(app);
}


// add response to a separate tab and close the UI
function _responseToAdd(e) {

  // store user's inputs;
  var actionItems = [];

  var actionObject = new Object();

  var taskStatement = e.parameter.tboxTask;
  var owner = e.parameter.tboxOwner;
  var deadline = e.parameter.dboxDeadline;

  actionObject['task'] = taskStatement;
  actionObject['owner'] = owner;
  actionObject['deadline'] = deadline;

  actionItems.push(actionObject);

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Action Items");

  var headers = ['task', 'owner', 'deadline'];

  var valuesR = ObjApp.objectToArray(headers, actionItems); //returns [[]]
  sheet.getRange(sheet.getLastRow()+1, 1, 1, valuesR[0].length).setValues([valuesR[0]]);

  var app = UiApp.getActiveApplication();

  var panelActionItems = app.getElementById('panelActionItems');
  panelActionItems.clear();

  return app;


}
4

1 回答 1

1

我认为您可以使用多个面板来完成此操作,例如此帖子的答案,您可以构建面板并根据答案更改其内容...

于 2012-08-07T00:07:24.393 回答