Обработка элементов в dijit.Dialog
Здравствуйте. Столкнулся с такой странной проблемой. Есть на странице 2 кнопки - добавление данных и редактирование. Для обоих действий есть разные по составу формы и 2 диалога (dijit.dialog), в которых эти формы должны отображаться. При нажатии на первую кнопку, с сервера получается HTML-код формы, помещается в параметр content (dialog.attr(...))одного из диалогов, и диалог показывается с помощью show(). В итоге пользователь видит форму добавления. Со второй кнопкой аналогично, только форма другая.
И вот в чём проблема. Если зайти на страницу и открыть форму добавления, то все элементы в ней, имеющие dojoType, отображаются с нужными визуальными эффектами. Закрываю её, открываю диалог с формой редактирования - элементы имеющие dojoType нужных эффектов не имеют. По сути они просто не обрабатываются. И наоборот - если обновить страницу и сначала открыть форму редактирования, то с ней всё хорошо. Закрываем её, открываем форму добавления - ни один элемент не обрабатывается. При этом мы можем несколько раз открывать/закрывать тот диалог который открыли первым - с его элементами всегда всё будет хорошо. Думал что содержимое диалогов может как-то влиять на обработку друг-друга. Попробовал поставить onClose у диалогов в this.destroy(). Не помогло :( Подскажите пожалуйста, что ещё можно попробовать? P.S. Версия Dojo последняя. |
Через столько времени решение всё же найдено :)
Оказывается при обработки виджетов в диалогах они намертво застревают в DOM страницы. Когда открывается второй диалог, у которого элементы имеют те же id что и у первого, то они не обрабатываются т.к. Dojo видит уже существующие виджеты с такими id. Поэтому в onClose или onHide диалога нужно прописать вызов функции, которая бы ко всем виджетам которые есть в форме вызывала dijit.byId('widget_id').destroy() предварительно уничтожая и сам диалог. |
Передо мной тоже стоял выбор, какие диалоги использовать. Выбрал jQuery UI. Не знаю правильно я выбор сделал или нет, но пока вроде полет нормальный, стилизовал полностью по своему, в этом плане вполне удобная библиотека. Модальным или немодальным будет диалог, определяется заданием одного свойства, тоже нравится это.
|
Белый Тигр,
Я думаю проблемы бы не возникло если бы использовали уникальные ID для каждого элемента. Дублирование ID не приветствуется( плохой тон ). От себя, рекомендую использовать хоть какие нибудь средства отладки при разработке. Если бы к примеру использовали FireBug, то Вы бы сразу догадались об ошибке, которая отражается в консоли. При ошибке, в Вашем случае, вывелось бы Tried to register widget with id==myWidget but that id is already registered |
Цитата:
|
Извините, я точно не понял вопроса :D Да, при закрытии не уничтожаются элементы самого Dialoga. Что часто приводит к таким последствиям.
|
Часовой пояс GMT +3, время: 13:01. |