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

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

Заранее спасибо.
...
Рейтинг: 0 / 0
27.02.2013, 15:28
    #38168171
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по работе с всплывающими окнами
Sh.alena , т.е. ты считаешь что этого хватит для получения ответа?
...
Рейтинг: 0 / 0
27.02.2013, 15:38
    #38168191
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по работе с всплывающими окнами
Sh.alena, использовать javascript. И krvsa прав, мало информации
...
Рейтинг: 0 / 0
27.02.2013, 19:36
    #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
27.02.2013, 20:33
    #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
27.02.2013, 20:49
    #38168669
Sh.alena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по работе с всплывающими окнами
В этом случае zenPage.getComponentById('table').executeQuery() срабатывает сразу, как только окно открывается. И после того как запишешь данные и закроешь его таблица не обновится.
...
Рейтинг: 0 / 0
27.02.2013, 22:08
    #38168743
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по работе с всплывающими окнами
Sh.alenaВ этом случае zenPage.getComponentById('table').executeQuery() срабатывает сразу, как только окно открывается.
Ясно... Значит управление теряется.

Тогда нужно управлять элементами из дочернего окна. Другого пути нет.
...
Рейтинг: 0 / 0
27.02.2013, 22:20
    #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
28.02.2013, 08:40
    #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
28.02.2013, 08:49
    #38169019
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по работе с всплывающими окнами
А в диалоге view.addAccount в методе saveItem написать this.firePopupAction('ok');
В методе dialogCancel написать this.firePopupAction('cancel'); (ну и в onPopupAction при желании как-нибудь обработать и этот вариант)
...
Рейтинг: 0 / 0
28.02.2013, 10:43
    #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
28.02.2013, 11:44
    #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
01.03.2013, 01:56
    #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
01.03.2013, 15:41
    #38171138
Sh.alena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по работе с всплывающими окнами
Спасибо всем, все работает!!!
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / вопрос по работе с всплывающими окнами / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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