<p>Класс, позволяющий пересылать сообщения между вкладками</p><pre>
// ...
tabMessage = new TabMessage();
// подписываемся на изменение статуса загрузки
tabMessage.subscribe("upload-status", function (event, data){
switch (data.get('status')) {
case "start": {
log("start upload", data.get('file'));
break;
}
case "finish": {
log("start finish", data.get('file'), data.get('result'));
break;
}
case "progress": {
log("start progress", data.get('file'), );
break;
}
}
});
// ...
// при старте загрузки с одной вкладки отправляем статус на другие вкладки
self.getChildControlByName("uploadBtn").subscribe("onactivated", function (event){
self.upload();
var record = self.getUploadInfo();
tabMessage.notify("upload-status", record);
});
</pre>
<p>Уведомление об открытом документе</p><pre>
// Пример кода, который выполняется при открытии документа
require(["Browser/_Event/Broadcast/Message"], function (TabMessage) {
var tabMessage = new TabMessage();
var documentId = 245;
var eventName = "document.open:%id".replace("%id", documentId);
tabMessage.subscribe(eventName, function (event, data) {
if (data.readOnly) {
return;
}
// Нашалогика. Решаем кто и как будет реагировать. Например, покажем пользователю открытый документ*
console.warn("Документ уже открыт на другой вкладке.");
alert("Вот открытый вами документ.");
});
tabMessage.notify(eventName, {readOnly: true})
;});
</pre>
<p></p>
<p>Серверная шина событий</p>