Добрый день.
Подскажите почему может не вызываться метод заголовка для дифф в модуле уведомлений?
Кейс такой: в стандартный модуль уведомлений добавлены гиперссылки на продажу и лид. Сами гиперссылки прописаны отдельными дифами. А так же к ним добавлены текстовые заголовки тоже отдельными дифами. Заголовок для Лида прописан в локализованные строки. А для Продаж значение заголовка достаётся методом из системной настройки.
Проблема в том, что при добавлении продажи с открытым центром уведомлений не происходит вызов метода, прикрученного к свойству "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 + " ";
}
}