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