Сообщения. Свойство messages
Glossary Item Box
Общие сведения
Сообщения предназначены для организации обмена данными между модулями (см. "Sandbox. Обмен сообщениями между модулями").
Сообщение может быть двух режимов:
- Адресное. Адресные сообщения принимаются только последним подписанным подписчиком. Для установки сообщения в адресный режим необходимо его свойству mode присвоить значение this.Terrasoft.MessageMode.PTP.
- Широковещательное. Широковещательные сообщения принимаются всеми подписчиками. Для установки сообщения в широковещательный режим необходимо его свойству mode присвоить значение this.Terrasoft.MessageMode.BROADCAST.
Перечень доступных режимов сообщения представлен перечислением Terrasoft.MessageMode.
Кроме режимов, различают также направления сообщений:
- Публикация — сообщение может быть только опубликовано, т.е. является исходящим. Для установки направления публикации сообщения необходимо его свойству direction присвоить значение this.Terrasoft.MessageDirectionType.PUBLISH.
- Подписка — на сообщение можно только подписаться, т.е. оно является входящим. Для установки направления подписки на сообщение необходимо его свойству direction присвоить значение this.Terrasoft.MessageDirectionType.SUBSCRIBE.
- Двунаправленное — позволяет публиковать и подписываться на одно и то же сообщение в разных экземплярах одного и того же класса или в рамках одной и той же иерархии наследования схем (см. "Sandbox. Двунаправленные сообщения"). Соответствует значению перечисления Terrasoft.MessageDirectionType.BIDIRECTIONAL.
ВАЖНО В иерархии наследования схем не может быть объявлено одно и то же сообщение, но с разным направлением. Для таких случаев необходимо использовать двунаправленные сообщения. |
Примеры использования сообщения
Публикация сообщения
В схеме, в которой нужно осуществить публикацию сообщения, должно быть объявлено сообщение с направлением "публикация":
messages: { // Имя сообщения. "GetColumnsValues": { // Режим сообщения — адресное. mode: this.Terrasoft.MessageMode.PTP, // Направление сообщения — публикация. direction: this.Terrasoft.MessageDirectionType.PUBLISH } }
Публикация осуществляется вызовом метода publish у экземпляра класса sandbox.
// Метод получения результата публикации сообщения GetColumnsValues. getColumnsValues: function(argument) { // Публикация сообщения. return this.sandbox.publish("GetColumnsValues", argument, ["key"]); }
Здесь:
- “GetColumnsValues” — имя сообщения;
- argument — аргумент, передаваемый в функцию-обработчик подписчика. Объект, содержащий параметры сообщения;
- ["key"] — массив тегов для фильтрации сообщений.
Свойство sandbox объявлено во всех схемах.
ВАЖНО Публикация сообщения может возвращать результат работы функции-обработчика только при адресном режиме. |
Подписка на сообщение
В схеме-подписчике должно быть объявлено сообщение с направлением "подписка":
messages: { // Имя сообщения. "GetColumnsValues": { // Режим сообщения — адресное. mode: this.Terrasoft.MessageMode.PTP, // Направление сообщения — подписка. direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE } }
Подписка осуществляется вызовом метода subscribe у экземпляра класса sandbox:
this.sandbox.subscribe("GetColumnsValues", messageHandler, context, ["key"]);
Здесь:
- “GetColumnsValues” — имя сообщения.
- messageHandler — функция-обработчик сообщения.
- context — контекст выполнения функции-обработчика.
- [“key”] — массив тегов для фильтрации сообщений.
При адресном режиме метод messageHandler должен возвращать объект, который обрабатывается как результат публикации сообщения.
methods: { messageHandler: function(args) { //Возвращение объекта который обрабатывается как результат публикации сообщения. return { }; } }
При широковещательном режиме метод messageHandler ничего не возвращает.
methods: {
messageHandler: function(args) {
}
}