2013-10-10 31 views
0

三个问题:显示PopupPanel

  1. 为什么我popupPanel无法正确显示?
  2. 我怎样才能让它出现一次,如果多次点击?
  3. 如何添加关闭按钮到popupPanel?

function showPassword(e){ 
    var app = UiApp.getActiveApplication(); 
    var vrtPanel = app.getElementById("vrtPanel"); 
    //Create Spreadsheet Source 

    var spSheet = SpreadsheetApp.openById('0Aur3owCpuUY-dF92dGp3c2RORGNkY011dGFnMjBXbXc'); 
    var spTeacherList = spSheet.getSheetByName('TeacherList'); 

    //Create the form elements 
    var hdlTeacherName = app.createServerHandler('getTeacherName').addCallbackElement(vrtPanel); 
    var lbxTeacherName = app.createListBox().setId('lbxTeacherName').setName('lbxTeacherName').addChangeHandler(hdlTeacherName); 
    var lstTeacherNames = spTeacherList.getRange(1,1,spTeacherList.getLastRow(),1).getValues(); 
    lstTeacherNames.sort(); 

    for (var l = 0; l < lstTeacherNames.length; l++) { 
    lbxTeacherName.addItem(lstTeacherNames[l],l); 
    } 

    var lblTeacherName = app.createLabel('Teacher Name:'); 
    var txtTeacherName = app.createTextBox().setName('txtTeacherName').setId('txtTeacherName').setVisible(false); 

    var lblExt = app.createLabel('Ext:'); 
    var txtExt = app.createTextBox().setName('txtExt').setId('txtExt'); 

    var lblEmail = app.createLabel('Email:'); 
    var txtEmail = app.createTextBox().setName('txtEmail').setId('txtEmail'); 

    var lblSchool = app.createLabel('School:'); 
    var txtSchool = app.createTextBox().setName('txtSchool').setId('txtSchool'); 

    var btnCreate = app.createButton('Create Event'); 

    //Create validation handler 
    var valSubmit = app.createServerClickHandler('valSubmit'); 
    valSubmit.addCallbackElement(vrtPanel); 

    //Add this handler to the button 
    btnCreate.addClickHandler(valSubmit); 

    //Add all the elemnts to the panel 
    var formTable = app.createFlexTable().setCellPadding(3); 
    vrtPanel.add(formTable); 
    formTable 
    .setWidget(0,0,lbxTeacherName) 
    .setWidget(0,1,txtExt) 
    .setWidget(0,2,txtTeacherName) 
    .setWidget(1,0,txtEmail) 
    .setWidget(2,0,btnCreate); 

    //Add all the panel to the popup 
    var popPassword = app.createDecoratedPopupPanel(false, true).setId("popPassword"); 
    popPassword.add(vrtPanel); 

    app.add(vrtPanel); 
    app.add(popPassword); 
    return app; 
} 
+0

个人评论:你的学习速度非常快!你现在的版本看起来不错;-)我很高兴我在这方面提供了帮助。 –

+1

个人评论:我非常喜欢它的外观,虽然我在学习时不得不改造一些。感谢赞美,绝对是所有的帮助。我非常期待完成的产品,这帮助我管理计算机实验室和工作单。 –

+0

我添加了一个小编辑使其更加详尽:-) –

回答

0

有一个在你使用popupPanel的方式有些乱,你必须将它添加到您的主面板,并添加要在它显示给弹出本身的表。 你也应该决定你想展示的地方。 这里是你的代码工作的相关部分:

//Add all the elemnts to the panel 
    var formTable = app.createFlexTable().setCellPadding(3); 
    formTable 
    .setWidget(0,0,lbxTeacherName) 
    .setWidget(0,1,txtExt) 
    .setWidget(0,2,txtTeacherName) 
    .setWidget(1,0,txtEmail) 
    .setWidget(2,0,btnCreate); 

    var popPassword = app.createDecoratedPopupPanel(false, true).setPopupPosition(150,300).setId("popPassword"); 

    vrtPanel.add(popPassword.add(formTable)); 

    popPassword.show(); 
    return app; 
} 

要回答的第二点:金正日将不会出现多时间,只有一次。点3:如果你想用按钮关闭它,你将不得不添加一个按钮和一个服务器处理程序来关闭它(通过使用一个ID来获取它,就像任何其他的小部件一样),但它会更容易和用户友好利用自动隐藏功能,只需要改变这样的定义参数:

var popPassword = app.createDecoratedPopupPanel(true).setPopupPosition(150,300).setId("popPassword"); 

编辑:在你上面的例子中也可以使用

app.getElementById('popPassword').hide() 

即使没有自动隐藏,您的'valSubmit'函数(由按钮调用),因此当处理函数执行时,弹出窗口会隐藏。