nsIObserver

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

Краткое описание

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

Please add a summary to this article.
  Last changed in Gecko 0.9.6

Код интерфейса

[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;
  }
};

См. также

Метки документа и участники

 Внесли вклад в эту страницу: teoli, Dionys, JPEG
 Обновлялась последний раз: teoli,