Изменение доступности кнопки без обновления реестра (реализация сообщений sandbox)
Вопрос
По поводу изменения доступности кнопки без обновления реестра - подскажите, пожалуйста, где можно посмотреть реализацию сообщений sandbox?
Ответ
Примеров реализации сообщений в нашей системе довольно много. Самым ярким примером могут служить модули BasePageV2 и BaseSectionV2. В этих модулях при инициализации вызывается метод subscribeSandboxEvents(), который выполняет подписку на сообщения sandbox.
Например, в модуле BaseSectionV2 выполняется подписка на сообщение [CardChanged], и когда модуль получает это сообщение, он устанавливает изменённое значение соответствующему атрибуту. Само же сообщение отправляет (публикует) модуль BasePageV2 при вызове метода publishPropertyValueToSection(). В свою очередь, метод publishPropertyValueToSection() вызывается при изменении некоторых атрибутов модели карточки редактирования.
Вы можете поступить похожим образом. Например, в методе init() Вашей карточки редактирования (CasePage) подписаться на изменение поля [ServiceCategory]:
init: function() { this.callParent(arguments); this.on("change:ServiceCategory", function(model, value) { this.publishPropertyValueToSection("CurrentServiceCategory",value); }, this); }
Таким образом, при изменении поля [ServiceCategory] карточки новое значение будет записываться в атрибут [CurrentServiceCategory] раздела CaseSection.
После этого в разделе Вы сможете получить значение текущей категории, обратившись к атрибуту [CurrentServiceCategory]:
isEnableButtonColumbus: function() { var serviceCategory = this.get("CurrentServiceCategory"); if (!serviceCategory) { // Ваш код } else { return (serviceCategory.value ===UsrConsts.ServiceCategory.Dynamix); } }