Закрытие Окна, Диалог С Предложением Сохранить

YGol

Member
25.11.2013
23
0
#1
Задачка в следующем: перед закрытием окна (желательно если документ был изменен) спросить пользователя сохранить или нет и если ответ «Да» сформировать запрос и отправить серверу чтобы документ сохранился, если ответ «Нет», то просто закрыть окно. (аналогия толстого клиента на закрытие измененного документа)

Нагуглил событие window.onbeforeunload, но оно срабатывает и если закрывается диалог, значит как то надо определять что закрывается
Кто нибудь решил\решал подобную задачу?
Вроде бы она достаточно стандартная должна быть
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#2
Покажи пример страницы.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">У меня это работает</div></div><div class="sp-body"><div class="sp-content">
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom" xmlns:xe="http://www.ibm.com/xsp/coreex">

<script>
function closeIt()
{
return "Any string value here forces a dialog box to \n" + 
"appear before closing the window.";
}
window.onbeforeunload = closeIt;
</script>




<a href="http://www.microsoft.com">Click here to navigate to 
www.microsoft.com</a>

</xp:view>
 

YGol

Member
25.11.2013
23
0
#3
Диалог если закрыть крестиком отработает событие onbeforeunload.

И вот как отправить запрос серверу чтобы документ сохранился через клиентский js? и как поймать резульат диалога от события onbeforeunload?

Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">

<xp:scriptBlock id="scriptBlock1">


<xp:this.value><![CDATA[function BeforeClose()
{
return "Закрыть документ?";
}
window.onbeforeunload = BeforeClose;]]></xp:this.value>
</xp:scriptBlock>
<xp:br></xp:br>
<xp:button id="button1" value="Вызов диалога">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{java script:getComponent("dialog1").show()}]]></xp:this.action>
</xp:eventHandler></xp:button>
<xp:br></xp:br><xe:dialog id="dialog1">
<xp:button id="button2" value="Закрыть">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{java script:getComponent("dialog1").hide()}]]></xp:this.action>
</xp:eventHandler></xp:button>

</xe:dialog>
</xp:view>
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#4
Ага.. ну эта проблема только в IE. Значит надо передумывать с диалогами. Ну как минимум не позволять закрывать диалог крестиком или кнопкой Esc
 

YGol

Member
25.11.2013
23
0
#5
У меня почему то и события диалога не работают, закладка Events диалога, SSJS, наставил print -ов а результата нет. (остальные что в all properties клиентские)
как отловить нажатие закрытия?

И вот как отправить запрос серверу чтобы документ сохранился через клиентский js? и как поймать резульат диалога от события onbeforeunload?
вопросов много)))
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#6
У меня почему то и события диалога не работают, закладка Events диалога, SSJS, наставил print -ов а результата нет. (остальные что в all properties клиентские)
как отловить нажатие закрытия?

И вот как отправить запрос серверу чтобы документ сохранился через клиентский js? и как поймать резульат диалога от события onbeforeunload?
вопросов много)))
Для клиентского JS есть такая штука как консоль. Не знаю как в IE8, но в IE9 она есть. Так же консоль есть в Chrome и вроде как в FireFox
JavaScript:
console.log("тест")
Остальное можно загуглить касательно консоли.

Для вызова серверных событий с клиентской стороны пользуй компонент Remote Service в разделе Data Access библиотеки Ext Lib
Можно вызывать агенты, процедуры.. передавать параметры...