наглядный пример использования скрипта Google UI Builder и приложений

Я искал везде и не могу найти четкий пример того, как использовать Googles UI Builder и скрипт приложения. Я понятия не имею, что мне не хватает. Я думаю, это должно быть просто: v / YES, я прочитал все документы Googles, просмотрел видео и т. Д. - несколько раз - комбинация GUIB отсутствует(Google's UI Builder) и функцию обработчика обратного вызова, которую я могу найти.
EDIT: there are examples for SpreadSheets - not GSites

What I need to do:
Я хотел бы добавить текстовое поле и кнопку для получения поисковой фразы от пользователя на странице сайта Google. Я создал очень простой пользовательский интерфейс с единой потоковой панелью, текстовым полем и кнопкой, но могу получить только «Не определено». возвращается из Logger.log () независимо от того, что я делаю(see code below).

A bit of a rant:
Я был очень осторожен, чтобы назвать и назвать правильные имена. Я пытался использовать форпанель НО в GUIB, в него можно поместить только ОДИН виджет ?! ... И кнопка отправки войдет только в формпанель - да, я тоже не могу вставить свое текстовое поле !?(Why bother with the formpanel then - I don't get that! ...yeah I know about doPost() automatically being called on submit), Я хочу, чтобы виджеты оставались активными и не исчезали после одного использования, так что, может быть, formpanel / submitbutton все равно не будет работать - или это не правильный способ сделать это?

Down to business:
At any rate, what I've tried is to put the regular button and text box in a flowpanel with the following code...
EDIT: I deleted my original content here and reposted this section...

// Google Sites and UIBuilder (GUIB) - kgingeri (Karl)
// - this script is embedded in a GSite page via: Insert -> Apps Script Gadget.
//
// Withing GUIB I have defined:
// - a FlowPanel named 'pnlMain'
// - inside that a textBox named 'tbxQuery' and a button called 'btnSearch'
// - for btnSearch, I have defined (in the Events subsection) a callback function
//   btnSearchHandler (see it below doGet() here.  I expanded the [+] beside that
//   and entered 'tbxQuery'    
//
// the GUIB compnent tree looks like this...
//
//  [-] testGui
//    [-] pnlMain
//          btnSearch
//          tbxQuery
//
// btnSearch Event section looks something like this...
//
// Events
//  On Mouse Clicks
//  [X][btnSearchHandler][-]
//  [tbxQuery         ]<--'
//  [Add Server]
//  ...
//
// So... 
// 1) when the page is opened, the doGet() function is called, showing the defined UI 
// 2) when text is entered into the textBox and the button is clicked
// 3) the data from tbxQuery is **SUPPOSED TO BE** returned as e.parameter.tbxQuery
//    in the function 'btnSearchHandler(e)' **BUT IS NOT**  :v(
//
// (this functionality appears to work in a spreadsheet?! - weird?!)

//
//    [ predefined function --- Google calls on page open ]
//
// ...this works 'as advertised' ;v)
//
function doGet(e) {
  var app = UiApp.createApplication();
  app.add(app.loadComponent("testGui"));  // ...the title that shows in G/UIBuilder
  return app;
}

//
//    [ callBack for when a button is clicked ]
//
// ...I always get 'Resp: [Undefined]' returned in the View -> Logs menu?!
// ...I also tried to put 'pnlMain' in the Event [+] param, no go :v(
//
function btnSearchHandler(e) {
  var resp = e.parameter.tbxQuery  // ...the data I want in the textBox widget
  Logger.log('Resp: [' + e.parameter.tbxQuery + ']');
  // ...more code to come, once this works!
}

Я также пытался добавить код для ручной установки обработчиков и т. Д. В doGet () и не использовать настройки событий GUIB, но также безрезультатно.

Conclusion?
Что дает? Нужно ли вручную кодировать GUI и не использовать GUIB? Я знаю, что на этот раз все просто, но если мне удастся заставить это работать, я уверен, что гораздо приятнее создавать другие приложения с GUIB! Кто-нибудь может дать мне или указать на четкий пример ?!

Спасибо за прочтение!

 kgingeri26 янв. 2013 г., 00:27
Да, прости за этого Сержа !! ; v) Я только что заметил, что никогда этого не делал !!!
 Serge insas25 янв. 2013 г., 22:41
вау, это "поздно" принять! Спасибо ;-))

Ответы на вопрос(2)

Решение Вопроса

пример построителя GUI

Когда вы в конструкторе GUI смотрите на свойства элемента, для которого вы хотите вызвать функцию, в конце списка параметров появляется «СОБЫТИЕ». свойства, где вы можете добавить имя функции и callbackElements, а также. !

screen capture

Надеюсь, это достаточно ясно, веселит, саржа

РЕДАКТИРОВАТЬ: если вы хотите взглянуть на более сложный пример, пожалуйстаоткрой этот (создайте копию, чтобы сделать ее редактируемой) или посмотрите, как она работаетВотЯ думаю, вы можете быть уверены, что GUI Builder действительно мощный инструмент.

 21 мая 2012 г., 07:16
Как вы можете видеть на скриншоте моего ответа, параметр, который должен быть установлен после «+»; является ИМЯ текстового поля (или родительской панели), возвращаемые значения будут доступны как e.parameter.itemname.
 21 мая 2012 г., 07:28
Рассматривая свой код, вы также можете использовать pnlMain в качестве callbackelement, но он должен работать с tbxQuery, если их параметры NAME определены правильно.
 kgingeri21 мая 2012 г., 05:37
Серж (или другие) все еще не может заставить его работать. Пример Сержа работает, как и ожидалось, в копии его листа. Это не касается сайтов ?! ,I'VE UPDATED MY ORIGINAL POST TO SHOW ALL DEFINITIONS (without screen shots)
 kgingeri21 мая 2012 г., 04:17
Спасибо, Серж! Я, конечноDID NOT NOTICE THE SMALL [+] под свойством события. Я определенно пытался использовать свойство события - я не мог опубликовать свои снимки экрана, иначе вы бы его увидели. Я работаю с сайтами, а не с электронными таблицами - не уверен, что это не так? Я предполагаю, что вы поместили имя других виджетов, которые вы хотите включить в обратный вызов здесь - то есть мой будет txtBox? Это все еще не работает для меня, поэтому я буду изучать ваш пример сс более. Но еще раз спасибо!
 kgingeri21 мая 2012 г., 06:35
Поэтому я подумал, что установил все значения e.parameter, которые я получил, и оказалось, что все они являются значениями, которые определяют событие кнопки и нажатия ... (этот формат не будет отображаться прямо в комментарии) ... / param [clientY] = 61 / param [clientX] = 94 / param [eventType] = click / param [ctrl] = false / paramMeta Stack Overflow = false / param [source] = btnQuery / param [button] = 1 / param [alt] = false / param [screenY] = 549 / param [screenX] = 426 / param [y] = 12 / param [shift] = false / param [x] = 85 ... так что неудивительно, что я возвращаюсь "Не определено" !! Так как мне получить данные, которые я хочу ?!

Many thanks to Serge Insas!!

Ответ как показано ниже - я пропустил две вещи:

the small [+] beside the On Mouse Click server handler - to add a parameter to return

the Name is what is used NOT ID - set in Input Fields section of tbxQuery

(NOTE: non-data elements don't have names - so fplMain has only an ID, but still works)

Итак, вот полученный код и комментарии, описывающие настройки GUIB:

// Google Sites and UIBuilder (GUIB) - kgingeri (Karl)
// - this script is embedded in a GSite page via: Insert -> Apps Script Gadget.
//
// Withing GUIB I have defined:
// - a FlowPanel named 'fplMain'
// - inside that, a textBox named 'tbxQuery' (see Input Fields section - this in NOT ID)
//   and a button called 'btnSearch'
// - for btnSearch, I have defined (in the Events subsection) a callback function
//   btnSearchHandler (see it below doGet() here).  I expanded the [+] beside that,
//   and entered "fplMain" as the return param (it will return all data elements)   
//
// the GUIB compnent tree looks like this...
//
//  [-] SearchGui
//    [-] fplMain
//          btnSearch
//          tbxQuery
//
// "tbxQuery" Input Fields param, "Name"... **THIS MUST BE SET!
//
// Input Fields
//  ...
//  Name
//  [tbxQuery     ]
//
// "btnSearch" Event section looks like this...
//
// Events
//  On Mouse Clicks
//  [X][btnSearchHandler][-]
//  [fplMain          ]<--'
//  [Add Server]
//  ...
//
// So... 
// 1) when the page is opened, the doGet() function is called, showing the defined UI 
// 2) when text is entered into the textBox and the button is clicked
// 3) the data from tbxQuery is returned as e.parameter.tbxQuery (as would be any other
//    params under the flow panel "fplMain") in the function 'btnSearchHandler(e)'

//
//    [ predefined function --- Google calls on page open ]
//
function doGet(e) {
  var app = UiApp.createApplication();
  app.add(app.loadComponent("SearchGUI"));  // ...the title you choose in G/UIBuilder
  return app;
}

//
//    [ callBack for when a button is clicked ]
//
function btnSearchHandler(e) {
  var resp = e.parameter.tbxQuery  // ...the data in the textBox widget
  Logger.log('Resp: [' + e.parameter.tbxQuery + ']');
  //
  // ...more code goes here, to do something with the returned data
  //
}

Ваш ответ на вопрос