ExtJs 4 Как обойти проблему дублирования идентификатора с несколькими вкладками для сохранения состояния

У меня есть панель сетки, которая создается на нескольких вкладках. Каждый экземпляр панели сетки имеет одни и те же столбцы, но разные данные. Я пытаюсь использовать диспетчер состояний для сохранения настроек столбцов, таких как порядок столбцов и ширина.

Проблема в том, что ExtJs сохраняет (сгенерированный) идентификатор столбца в базе данных для первой вкладки, а следующая вкладка создает новые идентификаторы для столбцов и не может найти информацию о состоянии в базе данных для этих новых значений. Поэтому я не могу сохранять и загружать информацию о состоянии.

Изменить: я пытался использовать идентификаторы элементов вместо идентификаторов, потому что идентификаторы элементов содержатся внутри контейнера, поэтому он не будет дублировать идентификатор, если он находится на нескольких вкладках. Но Ext, похоже, генерирует идентификаторы, если идентификаторы отсутствуют, независимо от свойства itemId. Я добавил эту часть на тот случай, если она дает лучшее представление о том, чего я пытаюсь достичь: базе данных необходимо, чтобы все таблицы имели одинаковый идентификатор, но Ext требует, чтобы они были разными.


person LawZero    schedule 21.05.2013    source источник
comment
Ожидается ли, что ваши столбцы будут одинаковыми на вкладках? Какой менеджер состояний вы используете?   -  person dbrin    schedule 21.05.2013
comment
@dbrin Мои столбцы будут одинаковыми на вкладках. Я использую пользовательский менеджер состояний.   -  person LawZero    schedule 22.05.2013


Ответы (1)


Способ, которым я обходил это в прошлом, был таким...

    id: 'tab_panel_'+this.somthing_that_is_unique_like_a_table_name

что дает мне что-то вроде этого...

    <div id='tab_panel_my_first_table'>other information</div>
    <div id='tab_panel_my_second_table'>other information</div>
person wpenton    schedule 21.05.2013
comment
я думаю, проблема в том, что идентификаторы НЕ совпадают, но ОП хочет, чтобы они были одинаковыми, что не очень хорошая идея. - person dbrin; 22.05.2013
comment
Однако это будет проблемой, потому что, когда пользователь вносит изменения на первой вкладке, база данных сохранит настройки столбца для столбца с именем «tab_panel_my_first_table». Затем, когда вторая вкладка попытается загрузить настройки, она будет искать «tab_panel_my_second_table», которого там не будет. - person LawZero; 22.05.2013
comment
нет, если они используют одно и то же хранилище, которое выполняет вызов AJAX для загрузки данных... идентификатор не имеет ничего общего с загрузкой данных. есть обходные пути ;-) - person wpenton; 22.05.2013
comment
то, что я пытался сделать, заключалось в том, что вам нужно будет поместить уникальный идентификатор в конец идентификатора, чтобы решить проблему, с которой сталкивается OP, независимо от того, является ли это именем таблицы или независимо от того, идентифицирует ли этот конкретный набор данных. ОП сказал, что столбцы одинаковы, но данные разные, я уверен, что он мог бы что-то использовать, если оно на 100% уникально, даже если это «tab_panel_part_of_sql_where_clause_used_to_generate_data». - person wpenton; 22.05.2013
comment
извините, я не увидел часть, где идентификатор сохраняется в БД. Итак, позвольте мне понять, панель вкладок обрабатывается как столбец в БД? не могли бы вы выложить фрагмент кода? - person wpenton; 22.05.2013
comment
Эй, извините за задержку. Каждая GridPanel — это вкладка. Проблема в том, что каждая GridPanel использует одни и те же столбцы, поэтому, когда я закрываю один из них, я думаю, что он уничтожает уже используемые столбцы. Сейчас я работаю над фрагментом кода. - person LawZero; 07.06.2013