Привязка к columnsConfig грида детали, наследование конфигурации Grid детали
У меня есть деталь DocumentsDetail с реестром, отображающая Grid документов. Я реализовал в ней группировку документов по типу и в качестве содержимого каждой группы отображаю Grid с набором документов соответствующего типа. Но возникает вопроса:
Как унаследовать конфигурацию Grid и столбцов из DocumentDetail, чтобы Grid каждой группы выглядел идентично гриду детали? Т.е, 1)Имел идентичный набор столбцов. 2) Имел идентичные настройки внешнего вида, стилизацию.
Я не знаю как мне внутри грида группы отображать именно те столбцы, которые заданы в настройках детали.
//diff:
{
"operation": "merge",
"name": "Detail",
"values": {
}
}
},
{
"operation": "insert",
"parentName": "Detail",
"name": "DocumentsTestList",
"propertyName": "items",
"values": {
"generator": "ConfigurationItemGenerator.generateContainerList",
"idProperty": "Id",
"itemPrefix": "BorrowerDocGroup",
"collection": "BorrowerDocGroupsCollection",
"onGetItemConfig": "getDocsControlGroupConfig"
}
}
//methods:
getDocsControlGroupConfig: function (itemConfig, item) {
var itemId = item.get("Id");
var testItemGroupConfig = {
"className": "Terrasoft.ControlGroup",
"caption": {
"bindTo": "Caption"
},
"collapsed": true,
"id": "DocsGroup" + itemId,
"items": [{
"className": "Terrasoft.Grid",
"type": "listed",
"id": itemId,
"idProperty": "Id",
"itemPrefix": "Id",
"collection": {
"bindTo": "Collection"
},
//как настроить отображение грида, который реализует функциональность первоначального грида детали и имеет идентичную конфигурацию столбцов?
//здесь мне хотелось бы написать "columnsConfig": { "bindTo: "...?????"}
"columnsConfig": [
{
cols: 1,
key: [
{
"name": {
"bindTo": "MDocument"
}
}
]
}
],
"captionsConfig": [
{
cols: 1,
name: "document caption"
}
],
//"onGetItemConfig": {
// "bindTo": "getDocItemViewConfig"
//},
"dataItemIdPrefix": "document-item"
}]
};
itemConfig.config = testItemGroupConfig;
},
Нравится
Ты создаешь внутри одной детали несколько гридов?
Думаю, можно создать один общий класс для гридов и переопределить методы, которые принимают конфигурации строк и столбцов.
Ext.define("Terrasoft.controls.Название_твоего_грида", { alternateClassName: "Terrasoft.Название_твоего_грида", extend: "Terrasoft.ConfigurationGrid", // или Terrasoft.Grid и переопределить методы
/** * Инициализирует начальное значение конфигурации колонок. * @param {Object} gridConfig * @return {Array} */ initColumnsConfig: function(gridConfig) { var type = gridConfig.type; var config = this[type + "Config"]; var columnsConfig = (config ? config.columnsConfig : gridConfig.columnsConfig) || []; if (!gridConfig.columnsConfig) { gridConfig.columnsConfig = columnsConfig; } return columnsConfig; }, /** * Инициализирует начальное значение конфигурации заголовков. * @param {Object} gridConfig * @return {Array} */ initCaptionsConfig: function(gridConfig) { var type = gridConfig.type; var config = this[type + "Config"]; var captionsConfig = (config ? config.captionsConfig : gridConfig.captionsConfig) || []; if (!gridConfig.captionsConfig) { gridConfig.captionsConfig = captionsConfig; } return captionsConfig; }
Если хочешь ещё и из детали получить конфигурацию, то встроенной реализации механизма сообщений нет. Придется в зависимостях прописать sandbox и инициализировать его в методе конструктора constructor: function (config) { this.sandbox = new sandbox(); this.sandbox.moduleName = "имя_модуля"; this.sandbox.registerMessages({ "имя_сообщения": { "direction": Terrasoft.MessageDirectionType.PUBLISH, "mode": Terrasoft.MessageMode.PTP } }); this.callParent(arguments); },
Как вариант, можно попробовать перехватить Profile в котором находятся конфиги на отображение в списочном и плиточном отображении (listedConfig и tiledConfig).
К примеру в методе initProfile после вызова this.callParent(arguments) взять this.get("Profile") и динамически изменить listedConfig и tiledConfig для изменения конфигуарации колонок грида.
Но только эхтим не обойтись, так как профайл только изменит внешнее отображение, что не подгрузит значения в эти колонки. Чтобы добавить в запрос также нужные колонки можно переопределить addProfileColumns и добавить в него нужные колонки обьекта.
Для примера вот как можно добавить колонку ответсственного в запрос детали с документами (DocumentDetailV2):
addProfileColumns: function(esq) { //берем колонки var profileColumns = this.getProfileColumns(); //добавляем новую profileColumns.Owner = { aggregationType: undefined, caption: "Ответстсвенный", dataValueType: undefined, path: "Owner", subFilters: undefined, type: "text" }; //а это взято из метода addProfileColumns из GridUtilitiesV2 Terrasoft.each(profileColumns, function(column, columnName) { if (!esq.columns.contains(columnName)) { if (column.aggregationType) { this.addProfileAggregationColumn(esq, column, columnName); } else { esq.addColumn(columnName); } } }, this); }
Таким образом в запросе уйдет и колонка отвественного.
Изменяя значения в Profile можно динамически поменять отображение колонок и их значений.