Добрый день!
Необходимо отправить сообщение из детали на карточку редактирования этой детали. Для этого использую "sandbox". Код:
this.sandbox.publish("PublishDetailName", "ilaySchema6Detail", [this.sandbox.id]);
this.callParent(arguments);
}
this.callParent(arguments);
var detailId = "SectionModuleV2_ilayDiagnosisSection_CardModuleV2_detail_ilayRecomendation46fde591d61eilayRecomendationilayilayRecomendation1Page";
this.sandbox.subscribe("PublishDetailName", this.getDetailNameFromWhoOpen, this, ["CardModuleV2_ilayDiagnosisPage_detail_ilayRecomendation46fde591d61eilayRecomendationilayilayRecomendation1Page"]);
},
getDetailNameFromWhoOpen: function(detailName) {
var a = 5;
}
Не вызывается метод "getDetailNameFromWhoOpen", т.к. скорее всего неправильно задан 4-й параметр метода ["CardModuleV2_..."]. Подскажите, как быть!
Нравится
Здравствуйте.
Рекомендуем посмотреть соседнюю тему:
http://www.community.terrasoft.ru/forum/topic/15210
Эту тему находил, но там не совсем понятен принцип формирования тега (4-й параметр в методе "subscribe"). Также находил различные примеры в других проектах на 7.6 и 7.7 версиях, но какого-то определенного правила не нашел для того, чтобы правильно задать сигнатуры методов "sandbox" - каждый пример реализован слишком не так, как остальные.
Если конкретно рассмотреть код:
this.sandbox.subscribe("PublishDetailName", this.getDetailNameFromWhoOpen, this, ["CardModuleV2_..."]);
теоретически, 4-й параметр ["CardModuleV2_..."] является идентификатором именно этого сообщения, которое должно быть получено из:
this.sandbox.publish("PublishDetailName", "ilaySchema6Detail", [this.sandbox.id]);
, где этим идентификатором для метода "publish" является 3-й параметр.
Так ли это? Подчеркну, что задачей является передача сообщения из детали на карточку редактирования этой детали.
Да, Вы все поняли верно. При подписке на сообщение , массив идентификаторов передается четвертым параметром, а при публикации он передается 3-им. Для удачного получения сообщения один и тот же идентификатор должен присутствовать в обоих массивах.
Допустим так... А вот название этой переменной-идентификатора - оно какое-то особое по составу? Или можно абсолютно произвольным его задать? Суть в том, что при выполнении всего выше указанного, метод не вызывается! Почему, собственно, и была создана эта тема.
Не совсем понял про название переменной-идентификатора.
Вот рабочий пример кода для общения страницы редактирования с деталью:
Код для страницы контрагента.
Объявляем сообщение:
messages:{ "PublishDetailName": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.SUBSCRIBE } },
Подписываемся на сообщение в методе init:
methods: { init: function(){ this.callParent(arguments); var sandboxId = this.sandbox.id + '_detail_LTSTestDetail'; console.log(sandboxId); this.sandbox.subscribe("PublishDetailName", function(){ this.set("Name", "Great"); }, this, [sandboxId]); } },
Код для страницы редактирования детали.
Объявляем сообщение:
messages: { "PublishDetailName": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.PUBLISH }, },
Подписываемся на событие и при определенном условии публикуем сообщение:
methods: { init: function(){ this.callParent(arguments); var scope = this; var id = this.sandbox.id; var detailId = id.substring(0, id.indexOf('32c1bacf5d43LT')); console.log('detailId ' + detailId); this.on("change:LTSSTRING", function(){ var val = this.get("LTSSTRING"); if(val === 'test'){ scope.sandbox.publish("PublishDetailName", { test: "test" }, [detailId]); } }); } },
В данном примере оба идентификатора равны CardModuleV2_a924f56e-85a8-4bd5-a388-0009571f7988_AccountPageV2_detail_LTSTestDetail