Обновление Dialog'а
У меня словесный понос, но постараюсь сдерживаться.
Дано: На сайте показываются различные Dialog'и, сделанные из div'ов. Идентифицируются по id div'а. В принципе, между ними общее только этот div-оболочка. Содержимое div'а - все что угодно. Например, JS, который после обновления* должен корректно работать. А, и в этот же div входит генерируемый на php код JS JQuery UI, который инициализирует и настраивает этот же dialog. Писать оригинал не буду - код циклопический. Но должно быть похоже на такое: <div id="'.$sSide_guid.'"> <script> $(document).ready(function() { $("#'.$sSide_guid.'").dialog({blablabla}) </script> </div> Задача: Обновление окна - это клиент посылает ajax на сервер и тот возвращает сгенерированный код, которым надо просто заменить старое окно. Причем после обновления, JS, делающий из div'а dialog может поменяться. (Да и в самом "теле" окна может быть еще куча всякого JS) Обновление должно вызываться из внутренностей div'а dialog'а. Например, по отправке формы или по специальной кно.. короче, элемент с click'ом или чем там еще - обязательно расположен внутри div'а dialog'а. И что я только не делал... Как я понимаю - обновление должно делаться на стороне - надо вызывать функцию обновления с определенными параметрами, она будет отправлять ajax, получать готовый код, удалять старое окно и вставлять новое. Но после второй итерации старое не удаляется. Как мне кажется - проблема в id. function reload_side(side_id,new_side) { var tmp; tmp = document.getElementById(side_id); tmp.empty(); $('#insert_new_side_marker').prepend(new_side); }; Ну тут new_side генерачится в самом dialog'е, а потом передается функции. Ну не суть важно где новое окно генерачится. Я сначала еще пробовал делать обновление с помощью кода в dialog'е, но... или окно само себя удаляет и болт, или окно сначала ставит замену, а потом путается в id (их то теперь два одинаковых) Я даж аську дам - 232633173. |
Нафига удалять старое окно, заменить его содержимое недостаточно ?
this.element.html('новое содержимое диалога'); только надо думать где вызывать this невезде указывает на диалог. должно проканать внутри далогов унаследованных от ui.dialog, или контролёров повешанных на тот же элемент что и диалог (например написанных на jquery ui, или javascriptМVС), проконает ли this внутри callback'ов не знаю, вроде как должен. Если всё таки надо удалить старое окно тогда. $(".testDialog").dialog("destroy"); ну а новые создавать ты уже научился )) |
А вообще если внутри диалогов много js кода.
1)тогда заведи контроллёры для окон. например унаследуй виджет от диалог, и пропиши там свой нужный код, только init непереопределяй. 2)или создай новый виджет и используй его как контроллер. тогда инициализация будет выглядеть так. $(".myWin").dialog(); $(".myWin").myController();// здесь внутри весь javascript код для окна если развивать 2ю идею то инициализацию диалога можно запихнкть прям в init контроллера. Тогда нужно будет инициализировать только контроллер init:function(){ this.element.dialog(); }, вызов будет выглядеть. $(".testWin").myController();// создаст и контроллер и диалог |
function reload_side(side_id,new_side) { $('#'+side_id).dialog('destroy'); $('#insert_new_side_marker').prepend(new_side); }; Та же бнопня: Первое обновление - ок. После второго остается старое. this.element.html('новое содержимое диалога'); - вообще никак Простите за не технические фразы: Как я понимаю, если я делаю обновление окна изнутри окна - будет болт: функция замены не сможет "завершиться", как я понимаю. То же будет если я вызову что-то изнутри окна - этому что-то будет некуда возвращаться. Надо это делать полностью извне. Если выше я прав - то... мыслей нет никаких. Вот про контроллеры я не знаю ничего - сейчас погуглю. |
Что-то нивкакую...
Как вешать эти контроллеры - так и не понял... Через bind чтоли? Приведите (или дайте сылку) простейший пример контроллера. Желательно html увидеть тоже. Я прочитал, что такое MVC, ничего особо нового. Я прекрасно понимал и до этого зачем оно и т.п. Но я никак не разберусь с синтаксисом. makeObservableSubject - это стандартный медот или от jQuery? Ага, это не стандарт, не могу найти где скачать. ======================= Кажется ларчик просто открывался: $('#div_id').html(new_side); Просто .html Проверяю на всякий. |
Ну раз так хочется MVC, то выслал в личку пример использования контролёров.
Потом подумал и выложил здесь на всякий пожарный )) Набросал пошустрому вот эту демо. http://depositfiles.com/files/oc8qksvtx Максимум коментариев на примитивном языке, минимум функционала. jqueryUI почти аналогичен. В инете по jqueryUI, море уроков. |
Замечательно.
После "обновления" dialog'а - тест выпадает из textarea =) Он буквально пишется ВНЕ textarea. А сам textarea получается пустым и форма отсылает пустоту =) Как написал - сразу увидел <textarea/>текст</textarea> =) Как удалить пост не нашел. |
Часовой пояс GMT +3, время: 22:41. |