Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.09.2011, 21:31
Интересующийся
Отправить личное сообщение для Lewik Посмотреть профиль Найти все сообщения от Lewik
 
Регистрация: 06.07.2009
Сообщений: 17

Обновление 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.
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2011, 10:46
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Нафига удалять старое окно, заменить его содержимое недостаточно ?

this.element.html('новое содержимое диалога');

только надо думать где вызывать this невезде указывает на диалог.
должно проканать внутри далогов унаследованных от ui.dialog, или контролёров повешанных на тот же элемент что и диалог (например написанных на jquery ui, или javascriptМVС), проконает ли this внутри callback'ов не знаю, вроде как должен.


Если всё таки надо удалить старое окно тогда.
$(".testDialog").dialog("destroy");


ну а новые создавать ты уже научился ))
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 20.09.2011 в 11:14.
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2011, 11:18
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

А вообще если внутри диалогов много js кода.
1)тогда заведи контроллёры для окон. например унаследуй виджет от диалог, и пропиши там свой нужный код, только init непереопределяй.

2)или создай новый виджет и используй его как контроллер.

тогда инициализация будет выглядеть так.
$(".myWin").dialog();
$(".myWin").myController();// здесь внутри весь javascript код для окна


если развивать 2ю идею то инициализацию диалога можно запихнкть прям в init контроллера. Тогда нужно будет инициализировать только контроллер
init:function(){
    this.element.dialog();
},


вызов будет выглядеть.
$(".testWin").myController();// создаст и контроллер и диалог
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 20.09.2011 в 11:29.
Ответить с цитированием
  #4 (permalink)  
Старый 20.09.2011, 15:10
Интересующийся
Отправить личное сообщение для Lewik Посмотреть профиль Найти все сообщения от Lewik
 
Регистрация: 06.07.2009
Сообщений: 17

function reload_side(side_id,new_side)
{
	$('#'+side_id).dialog('destroy');
	$('#insert_new_side_marker').prepend(new_side);
};

Та же бнопня: Первое обновление - ок. После второго остается старое.

this.element.html('новое содержимое диалога'); - вообще никак

Простите за не технические фразы:
Как я понимаю, если я делаю обновление окна изнутри окна - будет болт: функция замены не сможет "завершиться", как я понимаю. То же будет если я вызову что-то изнутри окна - этому что-то будет некуда возвращаться.

Надо это делать полностью извне. Если выше я прав - то... мыслей нет никаких.

Вот про контроллеры я не знаю ничего - сейчас погуглю.

Последний раз редактировалось Lewik, 20.09.2011 в 17:37.
Ответить с цитированием
  #5 (permalink)  
Старый 23.09.2011, 15:21
Интересующийся
Отправить личное сообщение для Lewik Посмотреть профиль Найти все сообщения от Lewik
 
Регистрация: 06.07.2009
Сообщений: 17

Что-то нивкакую...
Как вешать эти контроллеры - так и не понял...
Через bind чтоли?

Приведите (или дайте сылку) простейший пример контроллера. Желательно html увидеть тоже.
Я прочитал, что такое MVC, ничего особо нового. Я прекрасно понимал и до этого зачем оно и т.п.
Но я никак не разберусь с синтаксисом.

makeObservableSubject - это стандартный медот или от jQuery?
Ага, это не стандарт, не могу найти где скачать.

=======================

Кажется ларчик просто открывался: $('#div_id').html(new_side);
Просто .html
Проверяю на всякий.

Последний раз редактировалось Lewik, 23.09.2011 в 20:34.
Ответить с цитированием
  #6 (permalink)  
Старый 23.09.2011, 23:48
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Ну раз так хочется MVC, то выслал в личку пример использования контролёров.
Потом подумал и выложил здесь на всякий пожарный ))

Набросал пошустрому вот эту демо.
http://depositfiles.com/files/oc8qksvtx
Максимум коментариев на примитивном языке, минимум функционала.

jqueryUI почти аналогичен. В инете по jqueryUI, море уроков.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 24.09.2011 в 00:02.
Ответить с цитированием
  #7 (permalink)  
Старый 25.09.2011, 14:39
Интересующийся
Отправить личное сообщение для Lewik Посмотреть профиль Найти все сообщения от Lewik
 
Регистрация: 06.07.2009
Сообщений: 17

Замечательно.
После "обновления" dialog'а - тест выпадает из textarea =)
Он буквально пишется ВНЕ textarea. А сам textarea получается пустым и форма отсылает пустоту =)
Как написал - сразу увидел <textarea/>текст</textarea> =) Как удалить пост не нашел.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление iframe с помощью AJAX Aglenn AJAX и COMET 4 02.09.2011 22:48
Обновление div'ов lor08 AJAX и COMET 4 25.06.2011 20:11
Обновление страницы AndreyS AJAX и COMET 6 16.05.2011 15:55
Обновление поля вместе с кнопкой,при нажатию на которую происходит обновление тома AJAX и COMET 8 26.11.2009 10:47
Цикличное обновление страницы Roman_kstu Общие вопросы Javascript 7 29.05.2008 05:55