Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.10.2010, 14:50
Новичок на форуме
Отправить личное сообщение для Белый Тигр Посмотреть профиль Найти все сообщения от Белый Тигр
 
Регистрация: 02.10.2010
Сообщений: 7

Обработка элементов в dijit.Dialog
Здравствуйте. Столкнулся с такой странной проблемой. Есть на странице 2 кнопки - добавление данных и редактирование. Для обоих действий есть разные по составу формы и 2 диалога (dijit.dialog), в которых эти формы должны отображаться. При нажатии на первую кнопку, с сервера получается HTML-код формы, помещается в параметр content (dialog.attr(...))одного из диалогов, и диалог показывается с помощью show(). В итоге пользователь видит форму добавления. Со второй кнопкой аналогично, только форма другая.
И вот в чём проблема. Если зайти на страницу и открыть форму добавления, то все элементы в ней, имеющие dojoType, отображаются с нужными визуальными эффектами. Закрываю её, открываю диалог с формой редактирования - элементы имеющие dojoType нужных эффектов не имеют. По сути они просто не обрабатываются. И наоборот - если обновить страницу и сначала открыть форму редактирования, то с ней всё хорошо. Закрываем её, открываем форму добавления - ни один элемент не обрабатывается. При этом мы можем несколько раз открывать/закрывать тот диалог который открыли первым - с его элементами всегда всё будет хорошо.
Думал что содержимое диалогов может как-то влиять на обработку друг-друга. Попробовал поставить onClose у диалогов в this.destroy(). Не помогло Подскажите пожалуйста, что ещё можно попробовать?
P.S. Версия Dojo последняя.
Ответить с цитированием
  #2 (permalink)  
Старый 04.02.2011, 15:24
Новичок на форуме
Отправить личное сообщение для Белый Тигр Посмотреть профиль Найти все сообщения от Белый Тигр
 
Регистрация: 02.10.2010
Сообщений: 7

Через столько времени решение всё же найдено
Оказывается при обработки виджетов в диалогах они намертво застревают в DOM страницы. Когда открывается второй диалог, у которого элементы имеют те же id что и у первого, то они не обрабатываются т.к. Dojo видит уже существующие виджеты с такими id.
Поэтому в onClose или onHide диалога нужно прописать вызов функции, которая бы ко всем виджетам которые есть в форме вызывала dijit.byId('widget_id').destroy() предварительно уничтожая и сам диалог.
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2011, 15:08
Аспирант
Отправить личное сообщение для revvo Посмотреть профиль Найти все сообщения от revvo
 
Регистрация: 17.01.2011
Сообщений: 38

Передо мной тоже стоял выбор, какие диалоги использовать. Выбрал jQuery UI. Не знаю правильно я выбор сделал или нет, но пока вроде полет нормальный, стилизовал полностью по своему, в этом плане вполне удобная библиотека. Модальным или немодальным будет диалог, определяется заданием одного свойства, тоже нравится это.
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2011, 17:45
Интересующийся
Отправить личное сообщение для anuarbek Посмотреть профиль Найти все сообщения от anuarbek
 
Регистрация: 20.06.2010
Сообщений: 18

Белый Тигр,
Я думаю проблемы бы не возникло если бы использовали уникальные ID для каждого элемента. Дублирование ID не приветствуется( плохой тон ).

От себя, рекомендую использовать хоть какие нибудь средства отладки при разработке. Если бы к примеру использовали FireBug, то Вы бы сразу догадались об ошибке, которая отражается в консоли.

При ошибке, в Вашем случае, вывелось бы
Tried to register widget with id==myWidget but that id is already registered
Ответить с цитированием
  #5 (permalink)  
Старый 13.10.2011, 17:57
Новичок на форуме
Отправить личное сообщение для Белый Тигр Посмотреть профиль Найти все сообщения от Белый Тигр
 
Регистрация: 02.10.2010
Сообщений: 7

Сообщение от anuarbek Посмотреть сообщение
Белый Тигр,
Я думаю проблемы бы не возникло если бы использовали уникальные ID для каждого элемента. Дублирование ID не приветствуется( плохой тон ).

От себя, рекомендую использовать хоть какие нибудь средства отладки при разработке. Если бы к примеру использовали FireBug, то Вы бы сразу догадались об ошибке, которая отражается в консоли.

При ошибке, в Вашем случае, вывелось бы
Tried to register widget with id==myWidget but that id is already registered
Вы не верно поняли первый пост. Один и тот же ID использовался потому что работа идёт с одним и тем же виджетом. Я изначально предполагал, что если уничтожается диалог, в котором виджет, то и уничтожается сам виджет. Оказалось не так. Кстати, как раз FireBug и помог обнаружить. Это баг dojo, очень давний и вредный
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2011, 18:31
Интересующийся
Отправить личное сообщение для anuarbek Посмотреть профиль Найти все сообщения от anuarbek
 
Регистрация: 20.06.2010
Сообщений: 18

Извините, я точно не понял вопроса Да, при закрытии не уничтожаются элементы самого Dialoga. Что часто приводит к таким последствиям.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать список multiple select с сортировкой элементов Nargiza Элементы интерфейса 2 17.08.2010 14:44
Быстрый разбор списка элементов. B~Vladi Общие вопросы Javascript 31 14.07.2010 15:52
Кто чем пользуется при создании html элементов vflash Общие вопросы Javascript 14 24.08.2009 21:12
Динамическая подстановка названий элементов spnova Элементы интерфейса 1 15.08.2009 11:39
Выбор элементов и построение списка выбранных элементов. madgals Events/DOM/Window 6 14.04.2009 22:30