2011-03-14 4 views
0

Я хотел бы реализовать шаблон наблюдателя, аналогичный компоненту Timer. Вместо вызова обратного вызова по истечении времени обратные вызовы, которые являются наблюдателями темы, будут вызваны из системных событий (например, новый файл, или новый e-mail, полученный и т. Д.). Я попытался использовать nsIObserverService в компоненте XPCOM, но кажется, что функции из компонента не могут вызывать наблюдателей в JavaScript с помощью NotifyObservers. NotifyObservers работает только при вызове из JavaScript.Обратный звонок с XPCOM

Заранее спасибо

+0

Я подозреваю, что ваш код был неправильным. 'nsIObserverService' должен работать отлично. – sdwilsh

+0

Ну, это возможно. Я признаю, что что-то не так, но мне непонятно, что не так. Код: http://paste.ideaslabs.com/show/VCQjuHg2pE Заголовок: http://paste.ideaslabs.com/show/FBtiY42Fuy IDL: http://paste.ideaslabs.com/show/DP4cTNYD4c JS Пример: http://paste.ideaslabs.com/show/UxdYXQUo82 Ошибка вызова «mycomp.observe». – user12707

ответ

1

Example::Example всегда работает на главном потоке (потому что он создается скриптом). Поэтому он никогда не создает прокси-сервер для службы наблюдателей. Но звонок Example::Call от Ex::Run происходит на фоне потока, и я думаю, что в этом случае звонок NotifyObservers возвращает NS_ERROR_UNEXPECTED (который вы игнорируете).