powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / вопрос по работе с всплывающими окнами
14 сообщений из 14, страница 1 из 1
вопрос по работе с всплывающими окнами
    #38168165
Sh.alena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

У меня имеется форма для добавления контактов на всплывающем окне. На родительской страничке есть панель с таблицей, на которой отображены все данные. Как сделать так, чтобы после добавления записей на всплывающем окне данные не только сохранялись в моей таблице, но и сразу обновлялись при закрытии окна на форме с таблицей? Чтобы мне не нужно было создавать еще и кнопку "Обновить" на родительской странице.

Заранее спасибо.
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168171
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh.alena , т.е. ты считаешь что этого хватит для получения ответа?
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168191
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh.alena, использовать javascript. И krvsa прав, мало информации
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168591
Sh.alena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим на странице zui.testTabs.cls имеется такой код:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page name="mainPage" xmlns="http://www.intersystems.com/zen" title="">
<hgroup>
<pane paneName="lookoutMenu1" align="left" valign="top"/>
<vgroup>
<fieldSet legend="ClassParent">
<tableNavigatorBar tablePaneId="table"/>
<dataController id="controller" modelClass="model.tblContact"/>
<form id="MyForm" align="center" labelPosition="top" controllerId="controller">
<tablePane id="table" onselectrow="zenPage.rowSelected(zenThis,which);" pageSize="6"
tableName="model.tbl_Contact" 
queryClass="model.tblContact" 
queryName="ListContacts" valueColumn="ID"  showZebra="true" useSnapshot="true" >
<column header="Name" colName="Name" width="20%" />
<column header="Communication1" colName="Communication1" width="20%" />
<column colName="ModifiedOn" hidden="true" />
</tablePane>
     <hgroup id="btnGroup" cellAlign="left">
	<button id="btnSave" caption="Добавить" onclick="zenPage.SaveItemContact();"/>
	<spacer width="10"/>
	<button id="btnDelete" caption="Удалить" onclick="zenPage.deleteItemContact();"/>
	<spacer width="10"/>
	<button id="btnEdit" caption="Редактировать" onclick="zenPage.editItemContact();"/>
	</hgroup>
</form>
</fieldSet>
<pane paneName="ChildContact" />
</vgroup>
</hgroup>
<pane paneName="addFormContact" hidden="true" />
</page>
}



при нажатии на кнопку "Добавить" срабатывает этот метод:

Код: javascript
1.
2.
3.
4.
5.
ClientMethod SaveItemContact() [ Language = javascript ]
{
	zenLaunchPopupWindow('view.addAccount.cls','FileSelection',
	'status,scrollbars,resizable,width=450,height=250');
}



view.addAccount.cls выглядит следующим образом:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
/// view.addAccount
Class view.addAccount Extends %ZEN.Dialog.standardDialog
{
/// Это XML область для этого компонента.
Parameter NAMESPACE;

Parameter APPLYBUTTON = 1;

Parameter DOMAIN = "MyDomain";

/// Этот блок Style содержит определение CSS стиля компонента.
XData Style
{
<style type="text/css">
</style>
}
/// Contents of this page:
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page name="addContactForm" xmlns="http://www.intersystems.com/zen" width="20%" height="40%" 
	title="#(%page.dialogTitle)#">
<pane paneName="dialogBody" id="body" />
<hgroup id="footer" width="100%" cellAlign="right">
<hgroup id="buttonHolder" cellAlign="right">
<button id="btnOK" caption=" OK " onclick="zenPage.saveItem();" />
<spacer width="5" />
<button id="btnCancel" caption="Cancel" onclick="zenPage.dialogCancel();" />
<spacer width="10" />
</hgroup>
</hgroup>
</page>
}
XData dialogBody
{
<pane xmlns =  "http://www.intersystems.com/zen" title ="">	
<pane align="left"  width="400">
<dataController modelId="" id="controller" modelClass="model.tblContact"/>
	<form id="MyForm" align="center" labelPosition="top" controllerId="controller">	
<hgroup>
	<!--Добавление ФИО-->
	<text label="ФИО" id="Name" name="Name" size="35"  dataBinding="Name"/>
	</hgroup>
	<hgroup>
	<vgroup>
	<hgroup>
	<!--Добавление: Дата рождения, Адрес, Должность-->
	<dateText label="Дата рождения:" id="DOB" name="DOB" dataBinding="DOB"/>
	<spacer width="20"/>
	<text label="Должность:" id="JobTitle" name="JobTitle" dataBinding="JobTitle"/>
	</hgroup>
	<textarea label="Доп.информация" id="Description" name="Dscription" cols="40" rows="5" dataBinding="Description"/>
	</vgroup>	
	</hgroup>	
       </form>
    </pane>
 </pane>
}
ClientMethod saveItem() [ Language = javascript ]
{
 //Получаем ссылку на объект контроллера
var controller = zenPage.getComponentById('controller');
//Сохраняем данные из формы через модель данных в базу
controller.save();
window.close();
}

}



теперь мне нужно чтобы после закрытия окна у меня данные в таблице с id="table" на zui.testTabs.cls обновились. Только как мне это сделать ведь table.executeQuery() теперь не сработает?
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168652
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh.alenaпри нажатии на кнопку "Добавить" срабатывает этот метод:

Код: javascript
1.
2.
3.
4.
5.
ClientMethod SaveItemContact() [ Language = javascript ]
{
	zenLaunchPopupWindow('view.addAccount.cls','FileSelection',
	'status,scrollbars,resizable,width=450,height=250');
}


теперь мне нужно чтобы после закрытия окна у меня данные в таблице с id="table" на zui.testTabs.cls обновились.
Попробуй так...

Код: javascript
1.
2.
3.
4.
5.
ClientMethod SaveItemContact() [ Language = javascript ]
{
	zenLaunchPopupWindow('view.addAccount.cls','FileSelection','status,scrollbars,resizable,width=450,height=250');
	zenPage.getComponentById('table').executeQuery();
}


Или там управление меняется напрочь?
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168669
Sh.alena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В этом случае zenPage.getComponentById('table').executeQuery() срабатывает сразу, как только окно открывается. И после того как запишешь данные и закроешь его таблица не обновится.
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168743
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh.alenaВ этом случае zenPage.getComponentById('table').executeQuery() срабатывает сразу, как только окно открывается.
Ясно... Значит управление теряется.

Тогда нужно управлять элементами из дочернего окна. Другого пути нет.
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38168753
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh.alena , нужно замутить нечто такое

tmp.html

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function openWin() {
	window.open('tmp1.html',null,"height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");
};
function test() {
	alert(1);
};
</script>
</head>
<body>
<button onclick='openWin();'>open</button>
</body>
</html>



tmp1.html

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
</script>
</head>
<body>
<button onclick='opener.test();'>test</button>
</body>
</html>



Поясню...
На главной странице сделай функцию которая будет обновлять твою таблицу... Она будет яваскриптовая и её можно будет вызвать из дочернего окна, как в моём примере. Причем в нужное тебе время. Т.е. перед закрытием...
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38169008
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На той zen-странице где нужно данные обновить нужно написать что-то вроде этого

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
ClientMethod onPopupAction(popupName, action, value) [ Language = javascript ]
{
	if (popupName=="FileSelection") {
		if (action=="ok") {
		        zen('table').executeQuery(true);
		}
	}
}
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38169019
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в диалоге view.addAccount в методе saveItem написать this.firePopupAction('ok');
В методе dialogCancel написать this.firePopupAction('cancel'); (ну и в onPopupAction при желании как-нибудь обработать и этот вариант)
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38169171
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sh.alena,
я делаю примерно так ...
Метод меняем на
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
ClientMethod saveItem() [ Language = javascript ]
{
 //Получаем ссылку на объект контроллера
var controller = zenPage.getComponentById('controller');
//Сохраняем данные из формы через модель данных в базу
controller.save();
zenPage.firePopupAction('addAccount','можно вернуть значение');
}



в zui.testTabs.cls добавляем метод
Код: sql
1.
2.
3.
4.
5.
6.
7.
ClientMethod onPopupAction(popupName, action, val) [ Language = javascript ]
{
	if (val=="")return
	if (action=="addAccount") {
		zen('table').executeQuery(true)
	}
}
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38169274
Sh.alena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое!!! Получилось! 2 способа которые показали Аленочка и 2acid сработали!!! Кстати, а что если я захочу не только добавить данные с помощью модального окна, но и отредактировать уже имеющиеся данные в таблице. Как мне послать данные из моей таблицы на zui.testTabs.cls, после того как я выберу строку, в модальное окно на форму заполнения view.addAccount.cls? Я так понимаю мне нужно добавить что-то в мой метод rowSelected() на данный момент он выглядит так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ClientMethod rowSelected(table, which) [ Language = javascript ]
{
var controller = zen('controller'); 
controller.setModelId(table.getValue());
var id = controller.getModelId();
   if (controller.getModelId()==table.getValue()) 
   {
	    var id = controller.getModelId(); 
        controller.setProperty('modelId',id); 
		zen('MyForm').reset();
	}
		
        var childTable1 = zen('TableCom');
		childTable1.setProperty('parameters',1,id);
		childTable1.executeQuery(true);
		childTable1.selectRow(-1);
		zen('FormCom').reset();
}
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38170402
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sh.alena ,
Передаете параметр в диалог view.addAccount.
В диалоге объявляем свойство Property id As %String(ZENURL = "id");

В методе zui.testTabs.cls немного меняем вызов диалога (добавляем передачу параметра)

ClientMethod editItemContact() [ Language = javascript ]
{
var id = zenGetProp('table','value');
var params = new Object();
params.id = id;
zenLaunchPopupWindow('view.addAccount.cls','FileSelection',
'status,scrollbars,resizable,width=450,height=250',params);
}

Таким образом вы имеете в диалоге id записи которую будете редактировать. Можете сразу подгружать ее в контроллер на view.addAccount, установив там по умолчанию modelId="#(%page.id)#". Можете свой написать обработчик в onloadHandler.

А вообще вам стоило бы почитать документацию, раздел Popup Windows. Там все написано.
http://docs.intersystems.com/cache20122/csp/docbook/DocBook.UI.Page.cls?KEY=GZCP_popup#GZCP_popup_windows
...
Рейтинг: 0 / 0
вопрос по работе с всплывающими окнами
    #38171138
Sh.alena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, все работает!!!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / вопрос по работе с всплывающими окнами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]