Я только что создал скрипку Sencha, в которой у меня есть одна панель с двумя видами сетки внутри. Оба вида сетки облегчают выбор элементов слева направо и наоборот. Я пытаюсь отобразить выбранный элемент из левой сетки в правой сетке. Я использую прокси-сервер sessionStorage для хранения данных при перемещении элементов слева направо в виде сетки. Мне нужно использовать sessionStorage, потому что мое требование - сохранить этот выбор на страницах.
Ссылка на скрипку Sencha: https://fiddle.sencha.com/#view/editor&fiddle/2j7u
Хотя я не получаю никаких ошибок, но моя реализация не работает. Даже журналы консоли показывают правильные данные выбора. Но все же я не могу заполнить правильный вид сетки.
Я заметил одну вещь: в отладчике браузера в разделе Applcation -> SessionStorage мой объект sessionStorage всегда имеет значение null. Не знаю почему, но на консоли отображаются данные.
значение sessionStorage из отладчика
Будем очень признательны за любые указатели!
Кстати, та же реализация отлично работала с Ext JS 4.2. Но я столкнулся с проблемой при переходе на Ext JS 6.5
Спасибо, Дхирадж
Дальнейшее устранение неполадок:
Кроме того, я обновил ту же скрипку и успешно заставил ее работать дальше, закомментировав 'suspendEvents' и 'resumeEvents' для моей правой сетки store -> store2 и sessionStore -> sessionStore2 в методе tropos.selectDevices.addToSelect. Наряду с этим я понял, что строка store2.loadPage (1) в методе tropos.selectDevices.updateGridViews очищает мою сетку при загрузке. Я пытался избежать этого, используя для параметра конфигурации clearOnPageLoad значение false. Но это НЕ сработало, поэтому я прокомментировал эту строку, чтобы она работала. Теперь, хотя это работает, но мое основное требование СОХРАНЕНИЯ выбора пользователя все еще не выполнено, потому что sessionStorage все еще не работает.
Обновленная рабочий пример:https://fiddle.sencha.com/#view/editor&fiddle/2j7u
Спасибо, Дхирадж



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте этот код в своем addToSelect:
example.selectDevices.addToSelect = function(storeObj){
var addRecs = [], newRecs = [],
store2 = Ext.getCmp('grid2').getStore();
//********************
//I just comment all *sessionStore2* references because is redundand,
//store2 is the same as sessionStore2
//********************
//sessionStore2 = Ext.data.StoreManager.lookup('currentlySelectedDevices');
//store2.suspendEvents();
//sessionStore2.suspendEvents();
Ext.each(storeObj,function(record){
var rec = record.copy();
rec.phantom = true;
addRecs.push(rec);
newRecs.push(record.data.hid);
});
example.selectDevices.selectedDeviceIds = example.selectDevices.selectedDeviceIds.concat(newRecs);
store2.add(addRecs);
//store2.commitChanges();
for(i=0; i < store2.data.items.length; i++) {
console.info("addToSelect: Selected Device Serial [" + i + "] from STORE_2: " + store2.data.items[i].data.hid);
}
//sessionStore2.add(addRecs);
//for(j=0; j < sessionStore2.data.items.length; j++) {
// console.info("addToSelect: Selected Device Serial [" + j + "] from SESSION_STORAGE_2: " + sessionStore2.data.items[j].data.hid);
//}
//sessionStore2.sync();
store2.sync();
//sessionStore2.resumeEvents();
example.selectDevices.updateGridViews();
};
Обновлено: Вы должны пометить запись как phantom = true, чтобы синхронизация работала правильно
@Fabrio: Спасибо, Фабрио, мне не хватало фантомной магии! Теперь работает.
@Fabrio: Спасибо за попытку. Как и ожидалось, он работает, но это не то, что я могу использовать, потому что я не могу полностью удалить sessionStorage. Например, если пользователь выполняет выбор устройства и ЗАКРЫВАЕТ панель без действия отправки. Теперь, когда он пытается снова открыть панель (повторным нажатием кнопки «Выбрать устройство»), весь выбор устройства, который он сделал ранее, будет утерян, потому что для загрузки панели я использую прокси-хранилище sessionStorage. См. Вызов функции example.selectDevices.handleSelectedDevices, загружающей панель. По моему требованию мне пришлось СОХРАНИТЬ выбор пользователей.