Добрый день.
Подскажите почему может не вызываться метод заголовка для дифф в модуле уведомлений?
Кейс такой: в стандартный модуль уведомлений добавлены гиперссылки на продажу и лид. Сами гиперссылки прописаны отдельными дифами. А так же к ним добавлены текстовые заголовки тоже отдельными дифами. Заголовок для Лида прописан в локализованные строки. А для Продаж значение заголовка достаётся методом из системной настройки.
Проблема в том, что при добавлении продажи с открытым центром уведомлений не происходит вызов метода, прикрученного к свойству "caption" дифа. А для гиперссылки все вызывается и отображается нормально.
diff: [ { "operation": "insert", "name": "NotificationOpportunityLabel", "parentName": "NotificationItemActivityTopContainer", "propertyName": "items", "values": { "itemType": Terrasoft.ViewItemType.LABEL, "caption": {"bindTo": "getOpportunityCaption"}, "visible": {"bindTo": "getActivityOpportunityVisible"}, "classes": {"labelClass": ["account-comma-contact"]} } }] methods: { processNotificationsCollection: function(items) { items.each(this.addColumnLink, this); }, addColumnLink: function(item) { var self = this; item.getOpportunityCaption = function() { self.queryOpportunityCaption.call(self, item); return self.get("NotificationOpportunityCaption"); }; }, queryOpportunityCaption: function() { Terrasoft.SysSettings.querySysSettingsItem("OpportunityLinkCaptionRemindingSchema", function(value) { this.set("NotificationOpportunityCaption",value); }, this); } }
Может быть кто сталкивался с таким поведением?
Нравится
Вообще, как таковой биндинг caption на функцию возможен, судя по коду в MultiDeleteResultPageV2. Может, у Вас где-то раньше ошибка и JS-код прекращает выполняться?
{ "operation": "insert", "name": "ByRightsContainerHeader", "parentName": "ByRightsContainer", "propertyName": "items", "values": { "itemType": Terrasoft.ViewItemType.LABEL, "caption": {"bindTo": "getRightsCaption"}, "classes": { "labelClass": ["container-multi-delete-caption-labelClass"] } } }, /** * Returns caption for block with errors by rights. * return {String} Caption. * @protected */ getRightsCaption: function() { var items = this.get("RecordsData").getItems(); var count = items ? items.length : 0; return this.Ext.String.format(this.get("Resources.Strings.ByRightsCaption"), count); },
А в чём недостаток локализируемой строки перед системной настройкой, значение нужно часто менять? В крайнем случае можно попробовать сделать БП, синхронизирующий значение из настройки в строку на событии изменения настройки, хотя это и «костыль».
Насколько я понял после инициализации диф не хочет от рисоввываться. Решил кейс немного по-другому. Засунул в инит вызов функции, определяющей заголовок.
diff: [ { "operation": "insert", "name": "NrbProcessNotificationOpportunityLabel", "parentName": "StartDateContainer", "propertyName": "items", "values": { "itemType": Terrasoft.ViewItemType.LABEL, "caption": {"bindTo": "getOpportunityCaption"}, "visible": {"bindTo": "getActivityOpportunityVisible"}, "classes": {"labelClass": ["account-comma-contact", "nrb-label"]} } } ], methods: { init: function(){ this.callParent(arguments); this.getOpportunityCaption(); }, /** * Вытаскиваем из системной настройки заголовок для Продаж. */ getOpportunityCaption: function() { var caption; Terrasoft.SysSettings.querySysSettingsItem("NrbOpportunityLinkCaptionRemindingSchema", function(value) { caption = value; }, this); return caption + " "; } }