Вопрос

Как правильно добавлять элементы в коллекцию

Всем добрый день. Версия 7.12.

Небольшой эксперимент с деталями. Пытаюсь понять, можно ли добавлять на деталь свои данные, не относящиеся к объектам системы.

Переопределил в схеме детали (схема обычная, наследуется от BaseGridDetailV2) стандартный onGridDataLoaded следующим образом:

onGridDataLoaded: function(response) {
				var newCollection = Ext.create("Terrasoft.Collection");
				
				var startItem = response.collection.collection.items[0];
				startItem.values.Address = "zzzz";
				newCollection.add("zzz", startItem);
				
				var nextItem = startItem;
				nextItem.values.Address = "yyy";
				newCollection.add("yyy", nextItem);
				
				var preloadRowKeys = this.get("PreloadedGridDataRecords") || [];
				var gridData = this.getGridData();
				var preloadGridData = gridData.filter(function(item, key) {
					return preloadRowKeys.indexOf(key) >= 0;
				});
				var isClearGridData = this.get("IsClearGridData");
				if (isClearGridData) {
					if (!gridData.isEmpty() && (response.success || preloadGridData.isEmpty())) {
						gridData.clear();
					}
					this.set("IsClearGridData", false);
				}
				var performanceManagerLabel = this.sandbox.id + "_onGridDataLoaded";
				performanceManager.start(performanceManagerLabel);
				this.afterLoadGridData();
				const isContinueExecution = this.Terrasoft.findValueByPath(response, "errorInfo.response.timedout") &&
						this.getIsFeatureEnabled("UseQueryOptimize") && this.isNotEmpty(this.$CurrentFolder);
				if (!response.success && !isContinueExecution) {
					performanceManager.stop(performanceManagerLabel);
					return;
				}
				
				this.initCanLoadMoreData(newCollection);
				this.prepareResponseCollection(newCollection);
				this.initIsGridEmpty(newCollection);
				
				newCollection = this.clearLoadedRecords(newCollection);
				newCollection.eachKey(function(key, item) {
					gridData.insert(0, key, item);
				});
				
				this.addItemsToGridData(newCollection);
				this.addSelectedRecords(newCollection);
				this._setRecordsCount(newCollection);
				if (!preloadGridData.isEmpty()) {
					this.addItemsToGridData(preloadGridData, this.getAddRowsOptions());
					this.addSelectedRecords(preloadGridData);
				}
				this.onDataChanged();
				performanceManager.stop(performanceManagerLabel);
			},

 

Т.е. создаю собственную коллекцию, в которую два раза подряд добавляю первый элемент возвращаемой по запросу к объекту ContactAddress коллекции response.collection.collection.items[0], в котором также меняю значение колонки Address. В итоге на детали отображается две записи с одинаковым id, при выводе коллекции в консоль тоже всё верно, но на самой детали Address остался без изменений.

Как правильно изменить элемента коллекции? Либо, второй вариант - как добавить в Terrasoft.Collection свой новый элемент (не переопределять результаты запроса, а создать собственный)?

Нравится

1 комментарий
Лучший ответ

Пример добавления в Terrasoft.Collection  элементов

var results = this.Ext.create("Terrasoft.Collection");
this.Terrasoft.each(decodedAllowedResults, function(result) {
	var itemId = result.resultId;
	results.add(itemId, {
		id: itemId,
		value: itemId,
		displayValue: result.caption,
	});
}, this);

 

Пример добавления в Terrasoft.Collection  элементов

var results = this.Ext.create("Terrasoft.Collection");
this.Terrasoft.each(decodedAllowedResults, function(result) {
	var itemId = result.resultId;
	results.add(itemId, {
		id: itemId,
		value: itemId,
		displayValue: result.caption,
	});
}, this);

 

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