Alterator/class alterator-listbox
Актуально для alterator-4.17-alt3 alterator-fbi-5.26-alt1
HTML
Пример html-кода в вашем index.html
<form method="POST"> <table style="width:100%" name="hosts" class="alterator-listbox"> <thead> <tr> <th><span translate="_">Host</span></th> <th><span translate="_">Summary</span></th> </tr> </thead> <tbody> <tr> <td nowrap="yes"><span class="alterator-label" name="name"/></td> <td><span class="alterator-label" name="summary"/> </td> </tr> </tbody> </table> </form>
Т.е. мы хотим получить таблицу с двумя колонками, причем с возможностью сортировки этих колонок по алфавиту. Первая колонка у нас имя хоста, вторая информация о нем.
Важно, чтобы класс у таблицы был class="alterator-listbox"
, у таблицы так же должно быть уникальное имя, в нашем случаи это name="hosts"
Автозаполнение таблицы будет идти по тегам
Один из span тегов должен называться name т.е. . Почему так необходимо проверить в коде самого алтератора, без такого тега, не будет заполнена корректно таблица.
Итого, у нас получается html-таблица с именем hosts, классом alterator-listbox, одним и более элементами , которые в свою очередь имеют уникальное имя и класс alterator-label, один из span элементов должен иметь имя name, его положение не важно.
AJAX Пример scheme-кода в ajax.scm
(define-module (ui mySuper-module ajax) :use-module (alterator woo) :use-module (alterator ajax) :export (init)) (define (ui-init . data) (form-update-enum "hosts" (woo-list "/mySuper-module")) ) (define (init) (ui-init) )
При обращении к странице с нашим модулем mySuper-module, будет вызвана функция init (в конце приведенного кода), которая в свою очередь вызовет ui-init.
Основное действо заключено в вызове (form-update-enum "hosts" (woo-list "/mySuper-module")), которое заключается в обновлении таблицы hosts списком, полученным вызовом backend'а командой alterator-cmdline /mySuper-module action list .
Все достаточно просто. Можно использовать данный шаблон. Стоит только заменить mySuper-module на что-то более точное и при вызове woo-list использовать не прямое обращение к модулю, а дополнить его чем-нибудь типа "/mySuper-module/avail_objects", так чтобы можно было через один и тот же метод list обращаться к различным объектам avail_myobject avail_hosts и так далее. Пример можно посмотреть в alterator-sysinfo-0.8-alt3 (html,ajax).
Backend
Пример shell-backend'а
#!/bin/sh #turn of auto expansion set -f alterator_api_version=1 . alterator-sh-functions . shell-config list() { echo -e "aaa\nbbb\n" | while read i ;do write_table_item \ name "$i" summary "summary "$i"" \ host "$i" done } on_message(){ case "$in_action" in read) : ;; list) cluster-config list | list ;; esac } message_loop
Для построения правильного ответа будет использована функция из alterator-sh-functions-0.13-alt2 write_table_item. Ей необходимо передавать пару имя от span элемента и значение. Одно из имен обязательно должно быть name.