Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Добавление обработчиков событий для компонентов Zen / 7 сообщений из 7, страница 1 из 1
24.09.2009, 10:59
    #36214298
Guest_X
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
Собственно вопрос возник после того как выяснилось, что у компонента fieldSet нету свойства onmouseover, и соответственно нет стандартной возможности повесить обработчик. Попытка унаследовать это свойство от %ZEN.Component.control не дала нужного результата.

Может кто-то уже сталкивался с подобным вопросом: как добавить свойство для компонента, значение которого будет выполняться при возникновении определённого события?
...
Рейтинг: 0 / 0
24.09.2009, 14:16
    #36214996
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
делаешь новый компонент, унаследованный от fieldSet
перелопачиваешь метод %DrawHTML, добавление нового события делаешь по аналогии с теми которые уже есть
...
Рейтинг: 0 / 0
25.09.2009, 11:17
    #36216747
Guest_X
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
Ymka2007делаешь новый компонент, унаследованный от fieldSet
перелопачиваешь метод %DrawHTML, добавление нового события делаешь по аналогии с теми которые уже есть

По идеи добавление свойства "onmouseover As %ZEN.Datatype.eventHandler" должно нормально отрабатывать, т.к. у него есть параметр HANDLER, который:
parameter HANDLER [= normal]
This parameter is used control the code generated by the %GetEventHandlers code generator. If set to "normal", then code is generated to treat this a standard W3C event. If set to "", then no code is generated. Any other value is used as the actual code to generate for the event.

Но в метод %GetEventHandlers передается аргумент pIgnore (is an array of names of events that should be ignored). Похоже событие onmouseover попадает в "Игнор", поэтому и не отрабатывает... возникает вопрос: как формируется массив pIgnore?
...
Рейтинг: 0 / 0
25.09.2009, 16:42
    #36217889
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
вот что у меня получилось:
Код: plaintext
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.
Class WEB.Component.gbFieldSet Extends %ZEN.Component.fieldSet
{

Parameter NAMESPACE = "http://www.intersystems.com/zendemo";

/// Localization domain
Parameter DOMAIN = "%ZEN";

Method %DrawHTML()
{
	Set tTitle = $$$ZENVALHTML(..title)
	Set tLegend = $$$ZENVALHTML(..legend)
	Set tIgnore("onmouseover")=""
	Set tIgnore("onmouseout")=""
	Set cls = $S(..disabled:"fieldSetDisabled", 1 :"fieldSet")
	&html<<fieldset id="#(..%MakeId("fieldset"))#" class="#(cls)#" #(..%GetEventHandlers(.tIgnore))#
	onmouseover="zenPage.getComponent(#(..index)#).onmouseoverHandler();" onmouseout="zenPage.getComponent(#(..index)#).onmouseoutHandler();"
	>
	<legend id="#(..%MakeId("legend"))#" title="#(tTitle)#">#(tLegend)#</legend>>

	#; let group handle the details of layout
	Do ..%LayoutChildren(..tuple)

	&html<</fieldset>>
}

Method onmouseoverHandler() [ Language = javascript ]
{
	alert('fieldSetDisabled');
}
Method onmouseoutHandler() [ Language = javascript ]
{
	alert('fieldSet');
}
}
Код: plaintext
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.
/// Created using the page template: Default
Class WEB.test2 Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "WEB.ApplicationWeb";

/// Displayed name of this page.
Parameter PAGENAME = "";

/// Domain used for localization.
Parameter DOMAIN = "";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}
/// This XML block defines the contents of this page.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title=""
xmlns:demo="http://www.intersystems.com/zendemo">
<demo:gbFieldSet legend="dasdasdas">
<text/>
</demo:gbFieldSet>
</page>
}
}

все работает )))
...
Рейтинг: 0 / 0
25.09.2009, 16:58
    #36217929
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
вот:
Код: plaintext
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.
/// WEB.Component.gbFieldSet
Class WEB.Component.gbFieldSet Extends %ZEN.Component.fieldSet
{

Parameter NAMESPACE = "http://www.intersystems.com/zendemo";

/// Localization domain
Parameter DOMAIN = "%ZEN";
XData Style
{
<style type="text/css">
/* @doc=="Style for disabled fieldSet legend." */
.fieldSetDisabled legend {
	color: red;
	background: black;
}
.fieldSetDisabled {
	color: green;
	background: #E0E0E0;
}
</style>
}
Method %DrawHTML()
{
	Set tTitle = $$$ZENVALHTML(..title)
	Set tLegend = $$$ZENVALHTML(..legend)
	Set tIgnore("onmouseover")=""
	Set tIgnore("onmouseout")=""
	Set cls = $S(..disabled:"fieldSetDisabled", 1 :"fieldSet")
	&html<<fieldset id="#(..%MakeId("fieldset"))#" class="#(cls)#" #(..%GetEventHandlers(.tIgnore))#
	onmouseover="zenPage.getComponent(#(..index)#).onmouseoverHandler(this);" onmouseout="zenPage.getComponent(#(..index)#).onmouseoutHandler(this);"
	>
	<legend id="#(..%MakeId("legend"))#" title="#(tTitle)#">#(tLegend)#</legend>>

	#; let group handle the details of layout
	Do ..%LayoutChildren(..tuple)

	&html<</fieldset>>
}

Method onmouseoverHandler(cb) [ Language = javascript ]
{
	cb.className='fieldSetDisabled';
}
Method onmouseoutHandler(cb) [ Language = javascript ]
{
	cb.className='fieldSet';
}
}
...
Рейтинг: 0 / 0
25.09.2009, 17:00
    #36217935
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
или так:
Код: plaintext
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.
/// WEB.Component.gbFieldSet
Class WEB.Component.gbFieldSet Extends %ZEN.Component.fieldSet
{

Parameter NAMESPACE = "http://www.intersystems.com/zendemo";

/// Localization domain
Parameter DOMAIN = "%ZEN";
XData Style
{
<style type="text/css">
/* @doc=="Style for disabled fieldSet legend." */
.fieldSetDisabled legend {
	color: red;
	background: black;
}
.fieldSetDisabled {
	color: green;
	background: #E0E0E0;
}
</style>
}
Method %DrawHTML()
{
	Set tTitle = $$$ZENVALHTML(..title)
	Set tLegend = $$$ZENVALHTML(..legend)
	Set tIgnore("onmouseover")=""
	Set tIgnore("onmouseout")=""
	Set cls = $S(..disabled:"fieldSetDisabled", 1 :"fieldSet")
	&html<<fieldset id="#(..%MakeId("fieldset"))#" class="#(cls)#" #(..%GetEventHandlers(.tIgnore))#
	onmouseover="this.className='fieldSetDisabled'" onmouseout="this.className='fieldSet'"
	>
	<legend id="#(..%MakeId("legend"))#" title="#(tTitle)#">#(tLegend)#</legend>>

	#; let group handle the details of layout
	Do ..%LayoutChildren(..tuple)

	&html<</fieldset>>
}

}
...
Рейтинг: 0 / 0
28.09.2009, 09:25
    #36219775
Guest_X
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление обработчиков событий для компонентов Zen
Ymka2007,
Спасибо большое за примеры... принцип добавления событий для компонентов - ясен. :)
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Добавление обработчиков событий для компонентов Zen / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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