Вопрос по использованию sandbox

Добрый день!

Необходимо отправить сообщение из детали на карточку редактирования этой детали. Для этого использую "sandbox". Код:

addRecord: function(editPageUId) {
        this.sandbox.publish("PublishDetailName", "ilaySchema6Detail", [this.sandbox.id]);
        this.callParent(arguments);
}

subscribeSandboxEvents: function() {
        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_..."]. Подскажите, как быть!

Нравится

5 комментариев

Здравствуйте.
Рекомендуем посмотреть соседнюю тему:
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

Показать все комментарии