Всем добрый день. Версия 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 свой новый элемент (не переопределять результаты запроса, а создать собственный)?
Нравится
Пример добавления в 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);