28.04.2014, 14:16
|
Интересующийся
|
|
Регистрация: 28.04.2014
Сообщений: 22
|
|
Не создавать новое окно в extjs
Доброе время суток. Требуется помощь по EXTJS. Функция создает окно с некой информацией, в этой функции при onclik вызывается эта же функция, но грузится другая информация и создается еще одно окно. Мне нужно, чтобы информация грузилась в существующие окно и не создавалось новое. Надеюсь на вашу помощь.
|
|
28.04.2014, 14:48
|
|
Профессор
|
|
Регистрация: 08.07.2013
Сообщений: 212
|
|
Нужно больше кода. Куда грузится, какая информация? Зачем функция по созданию окна вызывает сама себя? Кажется проблема тут больше в структуре приложения чем во владении фреймворком
|
|
28.04.2014, 15:18
|
Интересующийся
|
|
Регистрация: 28.04.2014
Сообщений: 22
|
|
Сообщение от Makarov
|
Нужно больше кода. Куда грузится, какая информация? Зачем функция по созданию окна вызывает сама себя? Кажется проблема тут больше в структуре приложения чем во владении фреймворком
|
Вот код, который вызывает открытие окна
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}
})
}}
вот, функция рабочая, никаких проблем нету. Нужно всего-лишь, чтобы при повторном вызове данной функции, не открывалось новое окно, а все происходило в существующем.
|
|
28.04.2014, 15:42
|
|
Профессор
|
|
Регистрация: 08.07.2013
Сообщений: 212
|
|
Как видно из магического оператора new этот код не просто вызывает открытие окна, а создает новое окно.
Если просто взять и переписать ее так чтобы она работала уже с существующим окном, то это может повлечь за собой магические изменения по всему проекту, особенно если там все запущено в части структуры. Тем более там упоминались какие-то рекурсивные вызовы. Надеюсь Вы это понимаете.
Если вы все же хотите этого, то всего лишь надо создать экземпляр этого окна на более высоком уровне видимости, доступном функции, а на уровне функции изменять соответствующие его свойства, а не создавать новое окно. Это опять же не вопрос фреймворка, это вопрос базовых концепций программирования и понимания логики приложения.
|
|
28.04.2014, 15:48
|
Интересующийся
|
|
Регистрация: 28.04.2014
Сообщений: 22
|
|
Сообщение от Makarov
|
Как видно из магического оператора new этот код не просто вызывает открытие окна, а создает новое окно.
Если просто взять и переписать ее так чтобы она работала уже с существующим окном, то это может повлечь за собой магические изменения по всему проекту, особенно если там все запущено в части структуры. Тем более там упоминались какие-то рекурсивные вызовы. Надеюсь Вы это понимаете.
Если вы все же хотите этого, то всего лишь надо создать экземпляр этого окна на более высоком уровне видимости, доступном функции, а на уровне функции изменять соответствующие его свойства, а не создавать новое окно. Это опять же не вопрос фреймворка, это вопрос базовых концепций программирования и понимания логики приложения.
|
Я новичок в extjs, именно поэтому и прошу помощи. Не могли бы Вы на примерах показать?
|
|
28.04.2014, 16:05
|
|
Профессор
|
|
Регистрация: 08.07.2013
Сообщений: 212
|
|
Вы хотели сказать "я новичок в программировании", не так ли?
Проблема-то тут не в ExtJs.
Код мне писать влом, потмоу что это не поможет, будет тупо работой за вас, да и данных маловато - здесь пахнет куском большой программы.
Зато я могу понаркоманить:
Сейчас есть:
Функция ПоказатьГнома(цвет){
Рожаем Гнома с колпаком нужного цвета.
Показываем гнома;
}
Вы спрашиваете, что сделать чтобы у меня гном не рожался, а использовался старый. Все просто!
Рожаем гнома Васю;
Функция ПоказатьГнома(цвет){
Берем гнома Васю;
Надеваем на него колпак с нужным цветом;
}
Вот только если где-то в коде после того как показать гнома, например сталкивают его в кислоту, то придется этот кусок переписывать, иначе колпак на несуществующем Васе не поменяешь.
|
|
28.04.2014, 16:10
|
Интересующийся
|
|
Регистрация: 28.04.2014
Сообщений: 22
|
|
Сообщение от Makarov
|
Вы хотели сказать "я новичок в программировании", не так ли?
Проблема-то тут не в ExtJs.
Код мне писать влом, потмоу что это не поможет, будет тупо работой за вас, да и данных маловато - здесь пахнет куском большой программы.
Зато я могу понаркоманить:
Сейчас есть:
Функция ПоказатьГнома(цвет){
Рожаем Гнома с колпаком нужного цвета.
Показываем гнома;
}
Вы спрашиваете, что сделать чтобы у меня гном не рожался, а использовался старый. Все просто!
Рожаем гнома Васю;
Функция ПоказатьГнома(цвет){
Берем гнома Васю;
Надеваем на него колпак с нужным цветом;
}
Вот только если где-то в коде после того как показать гнома, например сталкивают его в кислоту, то придется этот кусок переписывать, иначе колпак на несуществующем Васе не поменяешь.
|
как раз таки в программировании не новичок. Это не "кусок большой программы", как было написано выше. Просьба была о помощи, а не тупо поиздеваться. Не в состоянии помочь - не пишите, может найдется человек, способный помочь.
|
|
28.04.2014, 20:00
|
Профессор
|
|
Регистрация: 07.08.2013
Сообщений: 214
|
|
Сообщение от programmer_rulit
|
Вот код, который вызывает открытие окна
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}
})
}}
|
|
29.04.2014, 09:10
|
Интересующийся
|
|
Регистрация: 28.04.2014
Сообщений: 22
|
|
с этим разобрался. спасибо.
Последний раз редактировалось programmer_rulit, 29.04.2014 в 11:11.
|
|
|
|