В схеме секции не срабатывают "dependencies" аттрибутов секции, а в схеме карточки - срабатывают.

7.10
Для примера возьмем Lead
Создаем в схеме карточки (LeadPageV2)

                attributes: {
                        "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) почти идентично
                attributes: {
                        "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 в карточке и секции соответственно,
Открываем консоль, поехали

document.LeadSectionScope.set("firstAttr", true);
//НИЧЕГО НЕ ПРОИСХОДИТ !
//Исполнение в метод depMethod секции не переходит.
document.LeadPageScope.set("firstAttr", true);
//ОТЛАДЧИК ВСТАЕТ ВНУТРИ МЕТОДА depMethod карточки !

И как это понимать ?
Двойные стандарты для функциональности атрибутов в отношении зависимостей ?

Нравится

5 комментариев

Здравствуйте, Илья.

Зависимости атрибутов представляют собой зависимости между колонками конкретной записи. При изменении значения колонки в карточке редактирования срабатывает зависимость.
Раздел в свою очередь работает с коллекцией записей. Нет конкретной колонки, изменения которой должно вызвать срабатываение зависимости.

Ну в рамках карточки мы не обязательно привязаны к колонкам,
мы можем просто создать атрибуты (свои, пользовательские не связанные с колонками - что собственно и показано в примере) и на их изменение - зависимости выраженные в вызове методов текущего контекста.
Почему то же самое с атрибутами не доступно в рамках карточки секции ?
Возможно есть иной способ привязки логики к изменению атрибута ?
Например биндинг 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 на указанные методы.

Показать все комментарии