Развернуть все в иерархическом реестре

Здравствуйте.

Есть с деталь с иерархическим реестром. При загрузке такой детали - все записи в ней свернуты. Как можно добиться, чтобы они все были развернуты (ну или хотя бы до определенного уровня вложенности)? Пока сделали завязку на тип записи (в этой конкретной детали на верхнем уровне вложенности могу быть только записи определенного типа). 

 

		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "DataGrid",
				"values": {
					"hierarchical": true,
					"hierarchicalColumnName": "NrbParentId",
					"useLevelRendering": true
				}
			}
		]/**SCHEMA_DIFF*/,
		methods: {
 
 
			prepareResponseCollection: function(collection) {
 
 
				collection.each(function(item) {
 
					var type = item.get("NrbOpportunityProductType") && item.get("NrbOpportunityProductType").value || Terrasoft.GUID_EMPTY;
 
					if (type === NrbConstants.Opportunity.ProductType.Equipment ||
						type === NrbConstants.Opportunity.ProductType.Group) {
						item.customStyle = {
							"font-weight": "bold"
						};
						var grid = this.getCurrentGrid();
						grid.addExpandHierarchyLevel(item.get("Id"));
					}
				}, this);
			},
 
			initQueryOptions: Terrasoft.emptyFn,
 
		}

Но в консоли вылетает ошибка, что grid не определен (can't read property "addExpandHierarchyLevel" of undefined) и в детали вообще не отображаются данные. Впрочем, если нажать на кнопку "LoadMore", то данные прогрузятся и развернутыми будут именно те, записи которые мы добавили в prepareResponseCollection для развертывания. 

Нравится

4 комментария

В общем-то решили свою задачу как-то так

			prepareResponseCollection: function(collection) {
 
				var expandedHierarchyLevels = [];
				collection.each(function(item) {
 
					var type = item.get("NrbOpportunityProductType") && item.get("NrbOpportunityProductType").value || Terrasoft.GUID_EMPTY;
 
					if (type === NrbConstants.Opportunity.ProductType.Equipment ||
						type === NrbConstants.Opportunity.ProductType.Group) {
						item.customStyle = {
							"font-weight": "bold"
						};
						expandedHierarchyLevels.push(item.get("Id"));
					}
				}, this);
				this.set("ExpandedLevelsByDefault", expandedHierarchyLevels);
				this.expandDefaultHierarchyLevels();
			},
 
 
			onRender: function() {
				this.callParent(arguments);
				this.expandDefaultHierarchyLevelsAfterRender();
			},
 
// Нужен, чтобы развернуть требуемые элементы иерархии в Separate Mode
			expandDefaultHierarchyLevelsAfterRender: function() {
 
				var grid = this.getCurrentGrid();
				if (Ext.isEmpty(grid)) {
					return;
				}
				var expandedHierarchyLevels = this.get("ExpandedLevelsByDefault");
				expandedHierarchyLevels.forEach(function(item) {
					grid.toggleHierarchyFolding(item);
				});
			},
 
// Нужен, чтобы развернуть требуемые элементы иерархии в Combined Mode при выборе новой записи в реестре		
			expandDefaultHierarchyLevels: function() {
 
				var grid = this.getCurrentGrid();
				if (Ext.isEmpty(grid)) {
					return;
				}
				var expandedHierarchyLevels = this.get("ExpandedLevelsByDefault");
				expandedHierarchyLevels.forEach(function(item) {
					grid.addExpandHierarchyLevel(item);
				});
			},

Но в целом неплохо бы было иметь в Terrasoft.Grid свойство expandAll, которое бы можно было указать в конфигурации грида в секции diff - чтобы иерархический грид открывался с развернутыми записями

Здравствуйте, Андрей!

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

Спасибо, что предоставили решение своему вопросу, а не бросили все, когда нашли выход.

>Действительно хорошая идея, мы зарегистрируем это пожелание и передадим команде разработчиков.

В коробку такой метод, как развернуть все дерево не вошел?

Здравствуйте, Павел!

Зарегистрирована идея "Клиент хотел бы иметь возможность загружать иерархическую деталь/реестр сразу полностью раскрытой", пока не реализовывалась.

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