Visit Mozilla.org

nsIObserver

Материал из MDC.

« Справочник XPCOM API

Содержание

[править] Краткое описание

nsIObserver обеспечивает объекту возможность принимать сообщения. Такие сообщения обычно (но не всегда) рассылаются с помощью интерфейса nsIObserverService.


nsIObserver is defined in xpcom/ds/nsIObserver.idl, and has been frozen since Mozilla 0.9.6. It is scriptable.

[править] Код интерфейса

[scriptable, uuid(DB242E01-E4D9-11d2-9DDE-000064657374)]
interface nsIObserver : nsISupports
{
    void observe( in nsISupports aSubject,
                  in string      aTopic,
                  in wstring     aData );
};

[править] Методы

[править] observe

void observe( in nsISupports aSubject,
              in string      aTopic,
              in wstring     aData );

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

Обычно, в aSubject содержится объект, в результате изменения или другого действия над которым было создано полученное сообщение. Параметр aTopic определяет тип действия или изменения. А необязательный параметр aData и другие данные дополняют информацию о совершенном действии или изменении.

Конкретные значения, а так же смысл переданных параметров бывают разными, в зависимости от того где был зарегистрирован приемник и какая тема прослушивается.

Конкретный пример использования интерфейса nsIObserver может быть настроен на получение множества типов сообщений, и может вести себя по-разному в зависимости от переданных параметров. Чаще всего, основной параметр для выбора дальнейших действий — это aTopic, и в коде надо учитывать, что метод может быть вызван с неизвестным на момент написания значением параметра aTopic.

Так как система, обслуживающая прием сообщений, может вызывать конкретный приемник в разных контекстах, настоятельно рекомендуется не добавлять и не удалять приеники непосредственно в момент вызова метода observe.

[править] Связанные интерфейсы

nsIObserverService

[править] Пример кода

Следующий пример демонстрирует применение интерфейса nsIObserver, который позволяет зарегистрировать объект в системе пользовательских настроек для получения сообщений об изменении каких-либо значений (полный код примера и дополнительную информацию о системе настроек см. на странице Использование настроек из MozillaZine).

var prefObserver = {
  // nsIObserver
  observe: function (aSubject, aTopic, aData) {
    if (aTopic == "nsPref:changed") { // observe preference changes
      // aData contains the name of the changed preference
      dump(aData+" changed!");
    }
  },

  QueryInterface: function(aIID) {
    if(!aIID.equals(CI.nsISupports) && !aIID.equals(CI.nsIObserver))
      throw CR.NS_ERROR_NO_INTERFACE;
    return this;
  }
};

[править] См. также