Вопрос

Как обновить деталь reloadDetail?

Как обновить деталь reloadDetail?

На странице, где расположена деталь есть поле при изменении которого нужно включать и выключать доступ к редактированию детали. Т.е. кнопку + для детали.

В схеме детали на эту кнопку я сделал ссылку в свойстве visible и он успешно работает. Но деталь загружается на страницу 1 раз при входе. Нужно обновлять деталь и видимость ее кнопок после изменения поля прямо внутри страницы.

Информации по деталям считай никакой нет. Все функции, которые есть в ядре совершенно не гуглятся. Думаю, что функция, которая обновляет деталь называется

this.reloadDetail("MyDetailName");

Она вызывается, но вызывает ошибку - entitySchemaInfo is undefined

Как обновить деталь вместе с контролами и их видимостью?

Нравится

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

Откуда взялась reloadDetail и как её применить?

Сделай перестрел событий по sandbox. По клику на + посылай message в карточку, карточка как только получает эту мессагу посылает в ответ сообщение со значением вашего поля. Деталь принимает это сообщение и обрабатывает его и так далее и тому подобное.

Это сделать проще ну или можно покопаться  в кишках:

Кисловский Михаил Андреевич,

значение поля я и так получаю внутри детали. просто запросом к entity, но я не могу после этого сообщить детали, чтобы она полностью перегрузилась, чтобы изменилась видимость кнопки +. при нажатии + вызывается метод, ну да. 

Если вам нужна видимость то она, на мой взгляд, решится только this.reloadEntity самой карточки.

При попытке реализовать данный метод ничего не вышло. У Terrasoft нету entitySchemaInfo вобще и по исходникам примеров вызова данного метода не наблюдается.

 

Кисловский Михаил Андреевич,

ну а я о чем. что это за методы, которые в базовом коде есть, но нигде не вызываются? баг?

Данько Дмитрий Леонидович пишет:

ну а я о чем. что это за методы, которые в базовом коде есть, но нигде не вызываются? баг?

 Почему баг? Остатки старой реализации, либо узкоприменимый для особых нужд метод. 

Это нормально.

Кисловский Михаил Андреевич,

понял спасибо. а как лучше применить 

this.reloadEntity на странице раздела там где находится деталь, если да, то с какими параметрами?

Данько Дмитрий Леонидович,

Специально для тебя и для тех кто будет потом искать по этой теме. В кишках исходников нашёл this.updateDetail.

Пример использования:

this.details - полный массив деталей на какой либо карточке,

this.updateDetail({"detail": "Название детали из этого массива"}); - для перезагрузки

Данный метод доступен в карточке раздела или если пробросить this в document то можно просто в консоли баловаться с помощью него.

)))) спасибо за помощь. но это не то. .updateDetail перегружает ТОЛЬКО грид, ТОЛЬКО данные. он как раз у меня работает. нужен именно reloadDetail, который перегружает контрол целиком вместе с кнопками и гридом. в этом фишка

Данько Дмитрий Леонидович,

Кисловский Михаил Андреевич,

Чисто на уровне теории:

1) Замещаем BaseDetailV2

define("BaseDetailV2", ["terrasoft"],
	function(Terrasoft) {
		return {
			messages: {
				"ReloadDetail": {
					mode: Terrasoft.MessageMode.PTP,
					direction: Terrasoft.MessageDirectionType.SUBSCRIBE
				}
			},
			methods: {
				subscribeSandboxEvents: function() {
					this.sandbox.subscribe("ReloadDetail", function(config) {
						this.init(function() {}, this);
					}, this, [this.sandbox.id]);
				}
			}
		};
	}
);

2) Замещаем BasePageV2, добавить этот кусок

messages: {
	"ReloadDetail": {
		mode: Terrasoft.MessageMode.PTP,
		direction: Terrasoft.MessageDirectionType.PUBLISH
	}
},
methods: {
        reloadDetail: function(detailName) {
		var args = {}; //тут можно что-нибудь кинуть в деталь
		Terrasoft.each(this.details, function(detailInfo) {
			if (detailInfo.detailName === detailName) {
				this.sandbox.publish("ReloadDetail", args, [this.getDetailId('ContactCommunication')]);
			}
		}, this);
	},
}

Ну и если теперь кинуть что-то типа this.reloadDetail('ContactCommunication');

деталь должна заново проинициализироваться. Тестил 2минуты, возможно ничего не работает)

я не нашел подписку на событие 

ReloadDetail, думал может оно в ядро посылается и мне не видно. вполне вероятно что и правда - это остатки старого. 
Показать все комментарии