В схеме секции не срабатывают "dependencies" аттрибутов секции, а в схеме карточки - срабатывают.
7.10
Для примера возьмем Lead
Создаем в схеме карточки (LeadPageV2)
"firstAttr": {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
},
"secondAttr": {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
},
"depAttr": {
"dependencies": [
{
"columns": ["secondAttr", "firstAttr"],
"methodName": "depMethod"
}
],
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
}
},
methods: {
"onEntityInitialized": function() {
document.LeadPageScope = this;
this.callParent(arguments);
},
"depMethod": function() {
alert("Dep Trigged!!!")
}
}
Создаем в схеме секции (LeadSectionV2) почти идентично
"firstAttr": {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
},
"secondAttr": {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
},
"depAttr": {
"dependencies": [
{
"columns": ["secondAttr", "firstAttr"],
"methodName": "depMethod"
}
],
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
}
},
methods: {
"init": function() {
document.LeadSectionScope = this;
this.callParent(arguments);
},
"depMethod": function() {
alert("Dep Trigged!!!")
}
}
Открываем карточку Лида в Combined режиме,
Устанавливаем точки останова внутри метода depMethod в карточке и секции соответственно,
Открываем консоль, поехали
//НИЧЕГО НЕ ПРОИСХОДИТ !
//Исполнение в метод depMethod секции не переходит.
document.LeadPageScope.set("firstAttr", true);
//ОТЛАДЧИК ВСТАЕТ ВНУТРИ МЕТОДА depMethod карточки !
И как это понимать ?
Двойные стандарты для функциональности атрибутов в отношении зависимостей ?
Нравится
Здравствуйте, Илья.
Зависимости атрибутов представляют собой зависимости между колонками конкретной записи. При изменении значения колонки в карточке редактирования срабатывает зависимость.
Раздел в свою очередь работает с коллекцией записей. Нет конкретной колонки, изменения которой должно вызвать срабатываение зависимости.
Ну в рамках карточки мы не обязательно привязаны к колонкам,
мы можем просто создать атрибуты (свои, пользовательские не связанные с колонками - что собственно и показано в примере) и на их изменение - зависимости выраженные в вызове методов текущего контекста.
Почему то же самое с атрибутами не доступно в рамках карточки секции ?
Возможно есть иной способ привязки логики к изменению атрибута ?
Например биндинг value на метод:
Что в таком случае будет происходить -
При установке значения в аттрибут - каждый раз будет вызываться забинженный метод - в аргументы которого будет поступать устанавливаемое значение, а его return значение - будет установлено в качестве текущего value ?
Потому что applyDependencies из BusinessRulesApplierV2 работает только для BasePageV2 и её наследников. По сути это сахар над обычным бекбоновским this.on("change: ...
так что в секции можете в ините просто написать:
this.on("change:MyAttrColumn", this.myMethod, this);
где MyAttrColumn имя атрибута\колонки для которой будет тригерится по изменению метод myMethod описанный в блоке методов.
"Максим Шевченко" написал:По сути это сахар над обычным бекбоновским this.on("change
ну вот именно это я и подразумевал :)
Спасибо что уточнили.
А можно подключить applyDependencies из BusinessRulesApplierV2 в качестве зависимостей схемы секции - в таком случае тоже будет работать ?
Просто интересует однообразие.
Прям её не подключить, все же в базовой реализации этого метода анализируется атрибут IsEntityInitialized которого нет в секции. Но, вы можете попробовать написать свой миксин который будет пробегать по атрибутам, искать у них свойство "зависимости" и делать в этом форе this.on на указанные методы.