Как обновить деталь reloadDetail?
На странице, где расположена деталь есть поле при изменении которого нужно включать и выключать доступ к редактированию детали. Т.е. кнопку + для детали.
В схеме детали на эту кнопку я сделал ссылку в свойстве visible и он успешно работает. Но деталь загружается на страницу 1 раз при входе. Нужно обновлять деталь и видимость ее кнопок после изменения поля прямо внутри страницы.
Информации по деталям считай никакой нет. Все функции, которые есть в ядре совершенно не гуглятся. Думаю, что функция, которая обновляет деталь называется
this.reloadDetail("MyDetailName");
Она вызывается, но вызывает ошибку - entitySchemaInfo is undefined
Как обновить деталь вместе с контролами и их видимостью?
Нравится
Откуда взялась 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, думал может оно в ядро посылается и мне не видно. вполне вероятно что и правда - это остатки старого.