Использовать Observer или что-то другое?
Метки: [без меток]
Я разрабатываю приложение на Xulrunner.
Появилась необходимость изменять GUI (дизейблить и раздизейбливать кнопки) при возникновении некоторых событий в приложении.
Как обычно делаются подобные вещи? Используют паттерн Observer или что-то еще?
Есть ли готовые решения для этого в XUL?
В XUL для этого есть команды:
<commandset commandupdater="true" events="my-event-1,my-event-2" oncommandupdate="updateMyCommands();">
<command id="my-command-1" oncommand="doMyCommand1();"/>
<command id="my-command-2" oncommand="doMyCommand2();"/>
</commandset>
<button label="Do command 1" observes="my-command-1"/>
<button label="Do command 2" observes="my-command-2"/>
Когда нужно обновить команды посылаем сообщение о событии:
document.commandDispatcher.updateCommands('my-event-1');
Наборы <commandset commandupdater="true"/>, подписанные на это событие в ответ выполняют код из атрибута oncommandupdate. В данном случае это функция updateMyCommands(), которая по имени команды определяет её состояние (функцию писать самому).
Вообще стоит почитать об интерфейсах nsIDOMXULCommandDispatcher и nsIController.
![[logo]](/site/images/logo.jpg)