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) ... ) В общем, как-то так... -- С уважением. Алексей.