XUL: состояние наложения не обновляется в нескольких окнах - PullRequest
0 голосов
/ 01 августа 2011

У меня проблемы с появлением оверлея, который зависит от текущего состояния надстройки.

У меня есть элемент всплывающего меню, например «Установить видимым». Когда выбран, он показывает что-то, например «Образец текста» как пункт меню в контекстном меню контекстной области содержимого. Если этот флажок не установлен, «Образец текста» скрыт. Он хорошо работает в одном окне, но проблема в том, что другое окно уже открыто.

Давайте назовем исходное окно, Окно A и новое окно, Окно B. Когда я выбираю «Set Visible» из Окна A, «Образец текста» отображается в Окне A, но когда я переключаюсь на Окно B, «Set Visible» в его меню инструментов остается невыбранным, а «Sample Text» остается скрытым. Я хочу реализовать эту функцию в нескольких окнах, чтобы при внесении изменений в окно обновлялось состояние других экземпляров окна. Как мне решить эту проблему?

В качестве дополнительной информации, когда я выбираю «Set Visible» в окне A и открываю новое окно, скажем, Window C, изменения точно отражаются в окне C, т.е. «Set Visible» выбирается из меню «Инструменты», и это «Образец текста» становится видимым в окне С.

1 Ответ

2 голосов
/ 09 августа 2011

Каждый оверлей работает только со своим окном.Если вы хотите, чтобы изменение затронуло все наложения, вам нужен центральный экземпляр, который уведомит их.Самый простой способ сделать это - изменить настройку при нажатии «Set Visible».Все ваши оверлеи должны регистрировать прослушиватель для этого предпочтения , чтобы при изменении этого предпочтения они могли выполнять необходимые действия.

Другой способ - иметь модуль кода JavaScript в вашем добавочном номере (модуль загружается только один раз) и управляйте состоянием кнопки «Set Visible».Каждое наложение должно загружать модуль и регистрировать там свою функцию слушателя.При последующем нажатии кнопки должна быть вызвана функция модуля, которая вызовет все зарегистрированные функции прослушивателя.

...