2013-09-14 3 views
0

Ну, я читал документацию, и я считаю, что я правильно звоню в функции и передавая параметры, но для жизни я не могу заставить этот простой код пользовательского интерфейса работать.Пользовательский интерфейс скриптов Google Apps

Я генерации пользовательского интерфейса для электронной таблицы, используя следующий код:

function checkOut() { 

    var app = buildUI(); 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
    spreadsheet.show(app); 
} 

function buildUI() { 
    var gui = UiApp.createApplication(); 
    gui.setTitle("Check-Out/Check-In"); 
    gui.setStyleAttribute("background", "lavender"); 

    // Absolute panel for setting specific locations for elements 
    var panel = gui.createAbsolutePanel(); 

    // Equipment ID#s Label 
    var equipmentIDLabel = gui.createLabel("Equipment ID#s"); 
    equipmentIDLabel.setHorizontalAlignment(UiApp.HorizontalAlignment.CENTER); 
    equipmentIDLabel.setSize("20px", "125px"); 
    equipmentIDLabel.setStyleAttributes({background: "SteelBlue", color: "white"}); 

    // Add all components to panel 
    panel.add(equipmentIDLabel, 10, 0); 

    gui.add(panel); 

    return gui; 
} 

function getUIdata(eventInfo) { 
    // I know how to get the data from each element based on ID 
} 

Он генерирует Абсолютную панель правильно, когда checkOut() называется, но EquipmentIDLabel никогда не добавляется к панели. Я основывая код на упрощенной конструкции я создал в GUI Builder (который устареет в течение нескольких дней, поэтому я пишу код, так что я могу изменить его позже):

Nothing special

Так что же здесь происходит не так? Если я смогу понять, как добавить один элемент, я могу сделать вывод о остальном, посмотрев документы. Я никогда не был хорош в разработке графического интерфейса!

ответ

1

Вы могли бы, возможно, использовать сетку, как интересную альтернативу ... вот пример:

// define styles 
var labelStyle = {background: "SteelBlue", color: "white",'textAlign':'center','line-height':'20px','vertical-align':'middle','font-family':"Arial, sans-serif",'fontSize':'10pt'};// define a common label style 
var fieldStyle = {background: "white", color: "SteelBlue",'font-family':"Courrier, serif",'fontSize':'11pt'};// define a common label style 

function checkOut() { 
    var app = buildUI(); 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
    spreadsheet.show(app); 
} 

function buildUI() { 
    var gui = UiApp.createApplication(); 
    gui.setTitle("Check-Out/Check-In"); 
    gui.setStyleAttribute("background", "lavender"); 
    var panel = gui.createAbsolutePanel().setStyleAttribute('padding','10px'); 
    var grid = gui.createGrid(4,2).setWidth('300').setCellPadding(10);//define grid size in number of row & cols 
    var equipmentID = ['equipmentIDLabel','equipmentIDLabel1','equipmentIDLabel2','equipmentIDLabel3'];// define labels in an array of strings 
    for(var n=0 ;n<equipmentID.length ; n++){;// iterate 
    var equipmentIDLabel = gui.createLabel(equipmentID[n]).setWidth('125').setStyleAttributes(labelStyle); 
    var equipmentIDField = gui.createTextBox().setText('Enter value here').setName(equipmentID[n]).setSize("125", "20").setStyleAttributes(fieldStyle); 
    grid.setWidget(n,0,equipmentIDLabel).setWidget(n,1,equipmentIDField); 
    } 
    gui.add(panel.add(grid)); 
    return gui; 
} 

enter image description here

+0

Да, добавление сетки, казалось, работало нормально. Я не знаю точно, в чем проблема с Absolute Panel ... Интересно, потому что сетка добавлена ​​отлично, а затем я просто добавляю кнопку после сетки (не * в * сетку), и она выглядит просто отлично , В любом случае, я отлично работаю сейчас, и я слишком ленив, чтобы понять, почему один элемент не может быть добавлен в Абсолютную панель, такую ​​как ярлык, который я создал в своем исходном сообщении. Еще раз спасибо Serge :) –

1

Он выглядит как метод абсолютной панель смещения немного капризен и взять контроль над позиционированием, в моих тестах я был в состоянии положения панелей, которые видны следующим образом:

panel.add(equipmentIDLabel); 
    panel.add(equipmentIDField,150,0); 
    panel.add(otherLabel); 
    panel.add(otherField, 150, 20); 

Попробуйте с проб и ошибок, вы можете получить пользовательский интерфейс, который вам нужен, если бы я не перешел на альтернативный макет, verticalPanel немного лучше себя ведет, и, конечно, вы также можете использовать формы.

Еще одна небольшая ошибка заключается в том, что вы перевернули длину и высоту в оборудованииIDLabel.setSize («20px», «125px»);

Позвольте мне знать, если я могу быть более assitance

+0

Интересно, что мой ярлык не может быть добавлен в Абсолютную панель, но может быть добавлена ​​сетка. Фактически, добавление сетки сначала позволило элементам фактически быть добавлено в Абсолютную Панель позже с использованием тех же параметров, что и в моем исходном сообщении. Я понятия не имею, почему это произойдет, и я никогда раньше не делал никаких графических разработок, поэтому даже основы меня заставляют бороться. В любом случае, спасибо за попытку! PS - Я изменил порядок параметров для функции 'setSize', и ничего не изменилось, поэтому я не думаю, что это было проблемой: P –

+0

Глядя на мой код, я вижу, что первая строка должна быть без каких-либо параметров ... Я отредактировал его. – patt0

0

Конкретная проблема в вашем коде находится следующая строка:

// Add all components to panel 
    panel.add(equipmentIDLabel, 10, 0); 

Просто измените его до: panel.add(equipmentIDLabel);

..и вы увидите поле (в позиции 0,0).

Как отмечает patt0, вы можете добавить ДРУГИЕ компоненты и использовать позиционирование. Кажется, это ограничение добавления первого поля в absolutePanel.

Разумеется, GUI GUUE теперь не рекомендуется (с декабря 2014 года), но мне было интересно попробовать ваш код и посмотреть, что он по-прежнему в основном выполняется (по состоянию на февраль 2016 года).

Смежные вопросы