Как обновить деталь 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, думал может оно в ядро посылается и мне не видно. вполне вероятно что и правда - это остатки старого.