Здравствуйте коллеги. Имеется некий массив в детали, и кнопка на ней. Требуется выводить один элемент по нажатию кнопки, после следующего нажатия выводить следующий и убирать прошлый. Пожалуйста, дайте хоть какую нибудь подсказку
В первом GridDataCollectionAttr будет храниться скопированная коллекция реестра детали, во втором ClickNumber - количество кликов по кнопке.
2) В схеме детали нужно написать два метода (один - переопределение базового метода onGridDataLoaded, второй - кастомный метод, который будет динамически менять список реестра):
onGridDataLoaded: function(){this.callParent(arguments);const gridData =this.getGridData();if(gridData && gridData.collection.length>0){// var test = {...gridData};
var gridDataCollectionClone = gridData.collection.clone();// var test = Ext.clone(gridData);this.set("GridDataCollectionAttr", gridDataCollectionClone);
gridData.clear();// test.collection.addAll(gridDataCollectionClone.items);
var copiedGridData =this.get("GridDataCollectionAttr");
var originalKey = copiedGridData.keys[0];
var originalItem = copiedGridData.getAt(0);
gridData.insert(0, originalKey, originalItem);}},
onContactAddressLoadButtonClick: function(){
var copiedGridData =this.get("GridDataCollectionAttr");
var copiedGridDataLength = copiedGridData.length;if(copiedGridDataLength !=0){
var numberOfClicks =this.get("ClickNumber");
numberOfClicks +=1;this.set("ClickNumber", numberOfClicks);if(copiedGridData.length== numberOfClicks){this.set("ClickNumber", 0);
numberOfClicks =0;}const gridData =this.getGridData();
var keyToAdd = copiedGridData.keys[numberOfClicks];
var itemToAdd = copiedGridData.getAt(numberOfClicks);
gridData.clear();
gridData.insert(0, keyToAdd, itemToAdd);
console.log(copiedGridData);}}
И добавить локализируемую строку ShowNextRecordButtonCaption в схему детали.
Задумка такая, что при первичной загрузке реестра выполняется проверка на то, есть ли в реестре записи или нет. Если их нет, то кастомизация ничего не сделает, реестр просто завершит загрузку. Если же реестр не пустой, то мы копируем его в аттрибут GridDataCollectionAttr, оригинальный реестр очищаем, из аттрибута берем первый элемент коллекции и записываем его в оригинальный реестр. По нажатию на кнопку мы проходим по копии и по номеру нажатия выбираем соответствующий элемент из копии, очищаем оригинальный грид и пишем выбранный из копии элемент в оригинальный грид. Если кол-во кликов по кнопке становится равным длине копии (аттрибута) - обнуляем счетчик и начинаем сначала.
Проверили код - работает, проверяли на детали с адресами контактов. Вам нужно просто все это же настроить для кастомной детали, код можно и не изменять.
В первом GridDataCollectionAttr будет храниться скопированная коллекция реестра детали, во втором ClickNumber - количество кликов по кнопке.
2) В схеме детали нужно написать два метода (один - переопределение базового метода onGridDataLoaded, второй - кастомный метод, который будет динамически менять список реестра):
onGridDataLoaded: function(){this.callParent(arguments);const gridData =this.getGridData();if(gridData && gridData.collection.length>0){// var test = {...gridData};
var gridDataCollectionClone = gridData.collection.clone();// var test = Ext.clone(gridData);this.set("GridDataCollectionAttr", gridDataCollectionClone);
gridData.clear();// test.collection.addAll(gridDataCollectionClone.items);
var copiedGridData =this.get("GridDataCollectionAttr");
var originalKey = copiedGridData.keys[0];
var originalItem = copiedGridData.getAt(0);
gridData.insert(0, originalKey, originalItem);}},
onContactAddressLoadButtonClick: function(){
var copiedGridData =this.get("GridDataCollectionAttr");
var copiedGridDataLength = copiedGridData.length;if(copiedGridDataLength !=0){
var numberOfClicks =this.get("ClickNumber");
numberOfClicks +=1;this.set("ClickNumber", numberOfClicks);if(copiedGridData.length== numberOfClicks){this.set("ClickNumber", 0);
numberOfClicks =0;}const gridData =this.getGridData();
var keyToAdd = copiedGridData.keys[numberOfClicks];
var itemToAdd = copiedGridData.getAt(numberOfClicks);
gridData.clear();
gridData.insert(0, keyToAdd, itemToAdd);
console.log(copiedGridData);}}
И добавить локализируемую строку ShowNextRecordButtonCaption в схему детали.
Задумка такая, что при первичной загрузке реестра выполняется проверка на то, есть ли в реестре записи или нет. Если их нет, то кастомизация ничего не сделает, реестр просто завершит загрузку. Если же реестр не пустой, то мы копируем его в аттрибут GridDataCollectionAttr, оригинальный реестр очищаем, из аттрибута берем первый элемент коллекции и записываем его в оригинальный реестр. По нажатию на кнопку мы проходим по копии и по номеру нажатия выбираем соответствующий элемент из копии, очищаем оригинальный грид и пишем выбранный из копии элемент в оригинальный грид. Если кол-во кликов по кнопке становится равным длине копии (аттрибута) - обнуляем счетчик и начинаем сначала.
Проверили код - работает, проверяли на детали с адресами контактов. Вам нужно просто все это же настроить для кастомной детали, код можно и не изменять.