Добрый день, коллеги!

Возник простейший, но очень важный вопрос.

Я создал деталь (от FileDetailV2) и добавил в нее новый Grid путем объявления в diff. Эта часть сработала корректно. Новый грид называется Datagrid1.

Теперь хочу добавить в этот грид индикаторы сортировки. Но не понял, как мне попасть в скоп моего нового грида и оттуда вызвать этот метод addSortColumnIndicator? Отсюда два вопроса, как корректно вызвать этот метод и как его переопределить(например) для данного грида?

Нравится

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

1) Можно заглянуть в метод sortColumn. Вот описание сортировки в типичном гриде:

"sortColumn": {"bindTo": "sortColumn"},
"sortColumnDirection": {"bindTo": "GridSortDirection"},
"sortColumnIndex": {"bindTo": "SortColumnIndex"},

"Шумков Виталий" написал:переопределить(например) для данного грида?

2) Если метод из GridUtils, то можно прям в схеме детали переопределять метод (скопировать код и изменить или callParent-ом вызвать родителя)

"sortColumn": {"bindTo": "sortColumn"},
"sortColumnDirection": {"bindTo": "GridSortDirection"},
"sortColumnIndex": {"bindTo": "SortColumnIndex"},

Насколько я понимаю, это свойства, а мне нежно вызвать метод.
Метод принадлежит самому гриду
https://academy.terrasoft.ru/jscoresdk/#!/api/Terrasoft.controls.Grid

Как создать грид с уже имеющимися сортировочными колонками тоже неясно.

До методов которые не открыты наружу вы не как не достучитесь, и в скоуп контрола не попадете, можете разве что написать свой грид, наследуясь от базового грида, и переопределить там любой метод.
А вообще в конфиге грида написано:

...
sortColumnIndex: {
changeEvent: "sortColumn",
changeMethod: "setSortColumnIndex"
},
...

Следовательно если вы привяжите как указано выше:
"sortColumnIndex": {"bindTo": "SortColumnIndex"},

то установке и изменении этого самого атрибута SortColumnIndex вызовется метод базового грида
setSortColumnIndex а он вызовет метод updateSortColumn а он в свою очередь вызовет addSortColumnIndicator вот ответ на ваш первый вопрос, как вызвать этот addSortColumnIndicator,

как его переопределить, в самом начале моего комментария, написать свой контролл, наследуясь от базового.

Спасибо, за ответ!

много чего попробовал, но ничего не подходит.

Сейчас код детали такой
new_3.txt

При изменении SortColumnIndex ничего не происходит. Может в коде что-то не так.

Также заметил, что при инициализации грида вызывается из GridUtilitiesV2 метод

initSortActionItems: function() {
				var collection = this.Ext.create("Terrasoft.BaseViewModelCollection");
				var gridColumns = this.mixins.GridUtilities.getProfileColumns.call(this);
				this.Terrasoft.each(gridColumns, function(column, columnName) {
					collection.addItem(this.getButtonMenuItem({
						Caption: {bindTo: this.name + columnName + "_SortedColumnCaption"},
						Tag: columnName,
						Click: {bindTo: "sortGrid"}
					}));
				}, this);
				this.set("SortColumns", collection);
				this.updateSortColumnsCaptions(this.get("Profile"));
			},

this.updateSortColumnsCaptions(this.get("Profile"));

но this.get("Profile") возвращает пустой DataGrid. Может в этом загвоздка? Как думаете?

Попробуйте раз вы удалили существующий дата грид,
новый добавить с таким же именем, без приставки 1

Пробовал =)

Сейчас с техподдержкой занимаемся, вроде есть какое-то решение, но пока не получается.

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