Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Не создавать новое окно в extjs (https://javascript.ru/forum/extjs/46889-ne-sozdavat-novoe-okno-v-extjs.html)

programmer_rulit 28.04.2014 14:16

Не создавать новое окно в extjs
 
Доброе время суток. Требуется помощь по EXTJS. Функция создает окно с некой информацией, в этой функции при onclik вызывается эта же функция, но грузится другая информация и создается еще одно окно. Мне нужно, чтобы информация грузилась в существующие окно и не создавалось новое. Надеюсь на вашу помощь.

Makarov 28.04.2014 14:48

Нужно больше кода. Куда грузится, какая информация? Зачем функция по созданию окна вызывает сама себя? Кажется проблема тут больше в структуре приложения чем во владении фреймворком

programmer_rulit 28.04.2014 15:18

Цитата:

Сообщение от Makarov (Сообщение 309618)
Нужно больше кода. Куда грузится, какая информация? Зачем функция по созданию окна вызывает сама себя? Кажется проблема тут больше в структуре приложения чем во владении фреймворком

Вот код, который вызывает открытие окна
function showWindow(w,h,title,m,s,close){
        if(!win){
                var win = new Ext.Window({
                        width: w,
                        height: h,
                        title: title,
                        html:m,
			autoScroll: true,
                        layout:'fit',
                        bodyStyle:{'background-color': '#e4e4e4','background': s}
                })   
  
        }}


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

Makarov 28.04.2014 15:42

Как видно из магического оператора new этот код не просто вызывает открытие окна, а создает новое окно.

Если просто взять и переписать ее так чтобы она работала уже с существующим окном, то это может повлечь за собой магические изменения по всему проекту, особенно если там все запущено в части структуры. Тем более там упоминались какие-то рекурсивные вызовы. Надеюсь Вы это понимаете.

Если вы все же хотите этого, то всего лишь надо создать экземпляр этого окна на более высоком уровне видимости, доступном функции, а на уровне функции изменять соответствующие его свойства, а не создавать новое окно. Это опять же не вопрос фреймворка, это вопрос базовых концепций программирования и понимания логики приложения.

programmer_rulit 28.04.2014 15:48

Цитата:

Сообщение от Makarov (Сообщение 309631)
Как видно из магического оператора new этот код не просто вызывает открытие окна, а создает новое окно.

Если просто взять и переписать ее так чтобы она работала уже с существующим окном, то это может повлечь за собой магические изменения по всему проекту, особенно если там все запущено в части структуры. Тем более там упоминались какие-то рекурсивные вызовы. Надеюсь Вы это понимаете.

Если вы все же хотите этого, то всего лишь надо создать экземпляр этого окна на более высоком уровне видимости, доступном функции, а на уровне функции изменять соответствующие его свойства, а не создавать новое окно. Это опять же не вопрос фреймворка, это вопрос базовых концепций программирования и понимания логики приложения.

Я новичок в extjs, именно поэтому и прошу помощи. Не могли бы Вы на примерах показать?

Makarov 28.04.2014 16:05

Вы хотели сказать "я новичок в программировании", не так ли?
Проблема-то тут не в ExtJs.
Код мне писать влом, потмоу что это не поможет, будет тупо работой за вас, да и данных маловато - здесь пахнет куском большой программы.

Зато я могу понаркоманить:

Сейчас есть:
Функция ПоказатьГнома(цвет){
         Рожаем Гнома с колпаком нужного цвета.
         Показываем гнома;
}


Вы спрашиваете, что сделать чтобы у меня гном не рожался, а использовался старый. Все просто!

Рожаем гнома Васю;
Функция ПоказатьГнома(цвет){
    Берем гнома Васю;
    Надеваем на него колпак с нужным цветом;
}


Вот только если где-то в коде после того как показать гнома, например сталкивают его в кислоту, то придется этот кусок переписывать, иначе колпак на несуществующем Васе не поменяешь.

programmer_rulit 28.04.2014 16:10

Цитата:

Сообщение от Makarov (Сообщение 309639)
Вы хотели сказать "я новичок в программировании", не так ли?
Проблема-то тут не в ExtJs.
Код мне писать влом, потмоу что это не поможет, будет тупо работой за вас, да и данных маловато - здесь пахнет куском большой программы.

Зато я могу понаркоманить:

Сейчас есть:
Функция ПоказатьГнома(цвет){
         Рожаем Гнома с колпаком нужного цвета.
         Показываем гнома;
}


Вы спрашиваете, что сделать чтобы у меня гном не рожался, а использовался старый. Все просто!

Рожаем гнома Васю;
Функция ПоказатьГнома(цвет){
    Берем гнома Васю;
    Надеваем на него колпак с нужным цветом;
}


Вот только если где-то в коде после того как показать гнома, например сталкивают его в кислоту, то придется этот кусок переписывать, иначе колпак на несуществующем Васе не поменяешь.

как раз таки в программировании не новичок. Это не "кусок большой программы", как было написано выше. Просьба была о помощи, а не тупо поиздеваться. Не в состоянии помочь - не пишите, может найдется человек, способный помочь.

siber-biber 28.04.2014 20:00

Цитата:

Сообщение от programmer_rulit (Сообщение 309627)
Вот код, который вызывает открытие окна
function showWindow(w,h,title,m,s,close){
        if(!win){
                var win = new Ext.Window({
                        width: w,
                        height: h,
                        title: title,
                        html:m,
			autoScroll: true,
                        layout:'fit',
                        bodyStyle:{'background-color': '#e4e4e4','background': s}
                })   
  
        }}


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

очевидно же все ..у вас переменная win локальная. и когда вызывается функция это условие всегда true:
if(!win){
поэтому новое окошко создается каждый раз.

либо сделайте переменную глобальной (плохая практика), либо храните ссылку на окно в свойстве подходящего по смыслу объекта.
function showWindow(w,h,title,m,s,close){
        if(!App.win){
                App.win = new Ext.Window({
                        width: w,
                        height: h,
                        title: title,
                        html:m,
			autoScroll: true,
                        layout:'fit',
                        bodyStyle:{'background-color': '#e4e4e4','background': s}
                })   
  
        }}

programmer_rulit 29.04.2014 09:10

с этим разобрался. спасибо.


Часовой пояс GMT +3, время: 21:00.