Публикация
Передать значение (сообщение) из схемы детали на страницу детали.
19 июля 2018 14:36
Вопрос
Не работает прием сообщения. Версия 7.7.
methods: { editRecord: function(editPageUId) { this.callParent(arguments); var text = "Schema6Detail"; this.sandbox.publish("PublishDetailName", text); } }, messages: { "PublishDetailName": { "mode": this.Terrasoft.MessageMode.BROADCAST, "direction": this.Terrasoft.MessageDirectionType.PUBLISH } }
methods: { subscribeSandboxEvents: function() { this.callParent(arguments); this.sandbox.subscribe("PublishDetailName", this.getDetailNameFromWhoOpen, this); }, getDetailNameFromWhoOpen: function(detailName) { var a = 5; } }, messages: { "PublishDetailName": { "mode": this.Terrasoft.MessageMode.BROADCAST, "direction": this.Terrasoft.MessageDirectionType.SUBSCRIBE } }
Метод getDetailNameFromWhoOpen() не вызывается.
Ответ
Проблема в том, что Вы делаете паблиш сообщения, в момент до(!) того как страница редактирования детали будет открыта, после чего открывается страница редактирования, и там вы делаете подписку. Но момент уже упущен. Вы подписываетесь на сообщение тогда, когда его уже никто не опубликует.
Вам необходимо делать publish на странице редактирования, принимая результат в переменную.
В то время как в схеме детали, делать subscribe, обработчиком которого делать функцию возвращающую значение.
Пример.
Схема детали:
define("Schema6Detail", [], function() { return { entitySchemaName: "Recomendation", details: /**SCHEMA_DETAILS*/{ }/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[ ]/**SCHEMA_DIFF*/, methods: { addRecord: function(editPageUId) { this.callParent(arguments); }, init: function() { this.callParent(arguments); console.log("id in detail: " + this.sandbox.id); this.sandbox.subscribe("PublishDetailName", this.getDetailNameFromWhoOpen, this, [this.sandbox.id] ); }, getDetailNameFromWhoOpen: function() { return { param: "test!" }; } }, messages: { "PublishDetailName": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.SUBSCRIBE } } }; });
Схема страницы:
define("Recomendation1Page", [], function() { return { entitySchemaName: "Recomendation", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[ ]/**SCHEMA_DIFF*/, methods: { onEntityInitialized: function() { this.callParent(arguments); var res = this.sandbox.publish("PublishDetailName", null, [this.getDetailId()] ); alert(res.param); }, getDetailId: function() { var index = this.sandbox.id.indexOf("Recomendation1Page"); var newId = this.sandbox.id.substring(0, index); console.log("id in page: " + newId); return newId; }, }, rules: {}, messages: { "PublishDetailName": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.PUBLISH } }, attributes: { } }; });
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать