[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