Динамеческаое изменение активности кнопки в совмещенном режиме
Подскажите как динамически делать пункт меню в "Действие" карточки в совмещенном режиме.
В обычном режиме все работает нормально.
attributes: { "IsCanVisaStatus": { dataValueType: Terrasoft.DataValueType.BOOLEAN, value: true, // Значение по умолчанию которое передаеться при загрузке страницы на нашу кнопку dependencies: [{ columns: ["KtState"], // Отслеживаем изменение поля состояния methodName: "setCanVisaStatusContract" // и запускаем нашу функция если состояние изменчется }] } }, methods: { onEntityInitialized: function() { this.callParent(arguments); this.setCanVisaStatusContract(); // Запускаем функцию при входе на страницу когда поля уже заполненны }, getActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getButtonMenuItem({ Type: "Terrasoft.MenuSeparator", Caption: "" })); actionMenuItems.addItem(this.getButtonMenuItem({ "Caption": VisaHelper.resources.localizableStrings.SendToVisaCaption, "Tag": VisaHelper.SendToVisaMenuItem.methodName, "Enabled": {"bindTo": "IsCanVisaStatus"} // мониторим через привязку состояние значения атрибута })); return actionMenuItems; }, setCanVisaStatusContract: function(){ var stateId = this.get("KtState").value; // Текущая стадия var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { // Запрос к базе данных о том нужна ли кнопка отправки на визирования rootSchemaName: "KtContractKarTelState" }); esq.addColumn("KtCanVisa", "KtCanVisa"); // Сама колонка указывающая что нужна кнопка esq.getEntity(stateId, function(result) { if (result.success) { if (result.entity.get("KtCanVisa") && this.canEntityBeOperated()) { // this.canEntityBeOperated() - стандартный класс отвечает за то что если карточка на в режиме редактирования то false. this.set("IsCanVisaStatus", true); } else { // Присваивает атрибуту значение true или false в зависимости от результата запроса this.set("IsCanVisaStatus", false); } } }, this); } }
В отоге весь код работает хорошо но только в обычном режиме карточки, а совмещенном кнопка не видет атрибут хоть по девагу все запускается так же и значения поля в атрибуте меняется по кнопка просто его не видит. Пробовал атрибут вписать в Section - не помогло, атрибут видит кнопка но изменить его не получается.
Нравится
Нужно использовать механизм сообщений. Вот пример. Моем случае бинд был на аттрибут (в странице редакирования) "Enabled": {"bindTo": "enabledPlanPaymentDate"}
В секции пишем
messages: { "GetEnabledPlanPaymentDate": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.SUBSCRIBE } }, attributes: { "enabledPlanPaymentDate": { "type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "dataValueType": this.Terrasoft.DataValueType.BOOLEAN, "value": false } }, methods: { init:function() { this.callParent(arguments); this.sandbox.subscribe("GetEnabledPlanPaymentDate", function(args){this.$enabledPlanPaymentDate = args}, this, ["SectionModuleV2_InvoiceSectionV2"]); }, }
В странице реадактирования:
messages: { "GetEnabledPlanPaymentDate": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.PUBLISH } }, methods: { onEntityInitialized: function() { this.callParent(arguments); this.sandbox.publish("GetEnabledPlanPaymentDate", this.checkEnabledChangePlanPaymentDate(), ["SectionModuleV2_InvoiceSectionV2"]); }, checkEnabledChangePlanPaymentDate: function() { return this.$enabledPlanPaymentDate; } }
Нужно использовать механизм сообщений. Вот пример. Моем случае бинд был на аттрибут (в странице редакирования) "Enabled": {"bindTo": "enabledPlanPaymentDate"}
В секции пишем
messages: { "GetEnabledPlanPaymentDate": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.SUBSCRIBE } }, attributes: { "enabledPlanPaymentDate": { "type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "dataValueType": this.Terrasoft.DataValueType.BOOLEAN, "value": false } }, methods: { init:function() { this.callParent(arguments); this.sandbox.subscribe("GetEnabledPlanPaymentDate", function(args){this.$enabledPlanPaymentDate = args}, this, ["SectionModuleV2_InvoiceSectionV2"]); }, }
В странице реадактирования:
messages: { "GetEnabledPlanPaymentDate": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.PUBLISH } }, methods: { onEntityInitialized: function() { this.callParent(arguments); this.sandbox.publish("GetEnabledPlanPaymentDate", this.checkEnabledChangePlanPaymentDate(), ["SectionModuleV2_InvoiceSectionV2"]); }, checkEnabledChangePlanPaymentDate: function() { return this.$enabledPlanPaymentDate; } }
Трефилов Павел Сергеевич,
Спасибо, отлично работает. Не много изменил на двустороннюю подписку что бы атрибут менять через сообщение и тот что в секции и тот что на странице