[devel] Q: alterator/installer: Какова политика взаимодействия между index.scm и ajax.scm?
Aleksey Avdeev
solo на solin.spb.ru
Вт Окт 6 15:07:05 MSK 2015
02.10.2015 16:12, Aleksey Avdeev пишет:
> Приветствую.
>
> Я запутался в текущих реалях alterator`а и installer`а. Прошу помощи:
>
> 1. Какова текущая политика взаимодействия между index.scm и ajax.scm у
> интерфейсных модулей?
>
> 2. Доступны ли действия определённые в ajax.scm, при выполнении
> index.scm в контексте инсталлятора?
>
> 3. Каким образом определять функции, общие для index.scm и ajax.scm?
> (Вижу что во многих модулях такие функции сдублированы.)
Анализируя документацию и код, удалось раскопать следующее:
1. Для отображения интерфейса модуля alteratora в инсталляторе
используется alterator-wizard, из пакета alterator-wizardface. При этом
для задания обработки действий по кнопкам next/previous/finish
используется модуль (alterator wizard) из пакета alterator-lookout.
2. В модуле (alterator wizard), в частности, определены следующие
функции, вполне работающие в ajax.scm (после подключения модуля):
а) wizard? -- возвращает #t, если wizard интерфейс активирован;
б) wizard-bind -- позволяет задавать указанное для кнопок
next/previous/finish;
в) wizard-update-activity -- позволяет управлять признаком активности
кнопок next/previous/finish;
Т. е. для модуля, не имеющего кнопки Apply при выполнении в среде
installer`а (там её функционал, вызов ui-write, переложен на Next/Finish
из ui/wizard/index.scm, пакета alterator-wizardface), при отсутствии
логики в index.scm, ajax.scm выглядит при мерно так:
(define-module (ui <имя> ajax)
...
:use-module (alterator ajax)
...
:use-module (alterator wizard)
...
:export (on-load))
...
(define (on-load)
...
(if (wizard?)
(begin
(wizard-bind "next" (lambda() (and (ui-write) 'forward)))
(wizard-bind "finish" (lambda() (and (ui-write) 'finish)))
(form-bind "apply_button" "click" ui-write))
...
)
Но для web интерфейса, данный ajax.scm нельзя -- ahttpd не может
грузить (alterator wizard)...
3. Т. к. ahttpd грузить (alterator wizard) не может (и похоже что от
слов "вообще"), ajax.scm должен грузить (alterator wizard) динамически,
_только_ если он доступен.
В конечном итоге, под alterator-standalone, alterator-wizard и ahttpd
у меня заработал следующий ajax.scm:
(define-module (ui <имя> ajax)
...
:use-module (alterator ajax)
...
:use-module (alterator algo) ; для dynamic-require
...
:export (on-load))
...
(define (ui-apply-bind) ; функция задания действий
; для динамический кнопок
(form-bind "apply_button" "click" ui-write)) ; по умолчанию
(and (dynamic-require '(alterator wizard) 'wizard-bind) ; проверка
; доступности модуля (alterator wizard) и
; наличия в нём функции wizard-bind
(use-modules (alterator wizard)) ; загрузка модуля, если он есть
(and (wizard?)
(define (ui-apply-bind) ; замена ui-apply-bind, если активен wizard
(wizard-bind "next" (lambda() (and (ui-write) 'forward)))
(wizard-bind "finish" (lambda() (and (ui-write) 'finish))))))
(define (on-load)
...
(ui-apply-bind)
...
)
В общем, как-то так...
--
С уважением. Алексей.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : signature.asc
Тип : application/pgp-signature
Размер : 278 байтов
Описание: OpenPGP digital signature
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20151006/c6c68aac/attachment-0001.bin>
Подробная информация о списке рассылки Devel