Разработчик расширения для Firefox: соблюдайте настройки, избегайте множественных уведомлений

Допустим, у моего расширения Firefox есть несколько настроек, но некоторые из них сгруппированы, например, интервал проверки, интервал неудачных повторных попыток, URL-адрес назначения. Они используются только в одной функции.

Когда я подписываюсь на службу предпочтений и добавляю наблюдателя, обратный вызов observe будет вызываться для каждого измененного предпочтения, поэтому, если случайно пользователь изменил все настройки в группе, мне придется выполнять одну и ту же процедуру для одной и той же подсистемы столько раз. так как у меня есть элементы в этой группе предпочтений. Это отличная избыточность!

Я хочу, чтобы observe вызывался только один раз для группы предпочтений. Сказать

extensions.myextension.interval1
extensions.myextension.site
extensions.myextension.retry

поэтому, если один или все эти параметры изменены, я получаю только одно уведомление об этом. Другими словами, независимо от того, сколько настроек изменилось в ветке, я хочу, чтобы обратный вызов observe вызывался один раз.


person Pablo    schedule 10.05.2010    source источник


Ответы (1)


Когда вы регистрируете наблюдатель pref в ветке (в вашем случае extensions.myextension), он будет уведомлять вас о каждом изменении предпочтений. Невозможно заставить его сообщать вам только один раз об изменении в ветке. Когда вызывается ваш метод наблюдения, вы получаете имя изменяемого предпочтения (это третий параметр). Вам придется фильтровать свои обратные вызовы на основе этого.

person sdwilsh    schedule 10.05.2010
comment
Итак, как filter в наблюдателе запустить определенную процедуру один раз для каждой группы предпочтений? - person Pablo; 11.05.2010
comment
Вам нужно будет отслеживать, сколько раз вы были уведомлены, и запускать свой код только один раз и навсегда X уведомлений, где X — количество настроек в этой ветке pref. - person sdwilsh; 11.05.2010
comment
не хорошее решение. надеюсь, будет лучше, родной для архитектуры фреймворка - person Pablo; 13.05.2010
comment
Ваш вариант использования на самом деле не был предназначен для API. Третий аргумент наблюдения — это имя изменения предпочтения, поэтому вы можете просто выполнять работу, необходимую для этого предпочтения. - person sdwilsh; 13.05.2010