|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Работаю с компонентом label. Суть задачи: Нажимаем кнопку "Выгрузить отчет в Excel", показываем label типа "Подождите, идет выгрузка в Excel". Отчет формируется. Сформировался - label прячем. Проблема: при первой выгрузке все ОК, при последующих - label не показывается вообще. Делаю так: ClientMethod exportToExcel() [ Language = javascript ] { var zsm = zenSynchronousMode; zenSynchronousMode=true; zenSetProp("lblExcelReportInformer","hidden",false); //злосчастная метка var tmp = zenPage.createExcelTemplate("/xlt/Template.xlt"); if (tmp==1) { //... var tmp = zenPage.sExportToExcel("..."); if (tmp!="") { alert(tmp); zenPage.ExcelApp.DisplayAlerts = false; zenPage.ExcelApp.Quit(); zenPage.ExcelApp = null; } else { zenPage.ExcelApp.Visible = true; } } zenSetProp("lblExcelReportInformer","hidden",true); zenSynchronousMode=zsm; return; } Как же заставить label показываться каждый раз без перезагрузки странички. Пока только вот это помогает :( window.location.reload(true); ----------------------------------------------- А мы тут плюшками балуемся... Аленочка тм ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 07:20 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Аленочка , JS однопоточный... И если ты хочешь делать некую "анимацию", то показывать/прятать метку должен один поток... А обратное действие выполнять уже другой. http://javascript.ru/blog/Andrej-Paranichev/Osnovy-programmnoj-animacii-JavaScript Хотя сам ЗЕН как-то странно на такое реагировал... Хтя пробовал давно. В CSP проблем нет вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 08:28 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Делай что-то типа этого ClientMethod start() [ Language = javascript ] { zenSetProp("lblExcelReportInformer","hidden",false); //злосчастная метка setTimeout(exportToExcel,1); } ClientMethod exportToExcel() [ Language = javascript ] { var zsm = zenSynchronousMode; zenSynchronousMode=true; //zenSetProp("lblExcelReportInformer","hidden",false); //злосчастная метка var tmp = zenPage.createExcelTemplate("/xlt/Template.xlt"); if (tmp==1) { //... var tmp = zenPage.sExportToExcel("..."); if (tmp!="") { alert(tmp); zenPage.ExcelApp.DisplayAlerts = false; zenPage.ExcelApp.Quit(); zenPage.ExcelApp = null; } else { zenPage.ExcelApp.Visible = true; } } zenSetProp("lblExcelReportInformer","hidden",true); zenSynchronousMode=zsm; return; } ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 08:32 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Аленочка, У меня на 10.2 отрабатывает без проблем ваш вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 08:44 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Аленочка, хочу поделиться личным опытом. У меня однажды была в точности такая же проблема, как и у Вас, а причина оказалась следующая. label (в моем случае это было нечто другое, но суть не в этом) стояла внутри некоего div. После прихода ответа от сервера (в Вашем случае - это ответ о результатах выгрузки отчета), содержимое этого ответа заполняло в callback-функции div как-то через div.innerHTML=... И мой label затирался. Поэтому при первом обращении к серверу label появлялся, при последующих - нет. Проверьте, может быть у Вас такая же причина. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 09:51 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Аленочка , Попробуйте исправленный вариант, предложенный krvsa : Class test.test Extends %ZEN.Component.page { /// Этот блок Style содержит определение CSS-стиля страницы. XData Style { <style type="text/css"> </style> } XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ] { <page xmlns=" http://www.intersystems.com/zen" title=""> <label id="lblExcelReportInformer" label="Подождите, идет выгрузка в Excel" hidden="true"/> <button caption="Экспорт" onclick="zenPage.start();"/> </page> } ClientMethod start() [ Language = javascript ] { zenSetProp('lblExcelReportInformer','hidden',false); //злосчастная метка zenSetDeferredAction(new Function("zenPage.exportToExcel();"),200); } ClientMethod exportToExcel() [ Language = javascript ] { var tmp=zenPage.sExportToExcel(1); if (tmp!="") { zenAlert(tmp); } zenSetProp('lblExcelReportInformer','hidden',true); } ClassMethod sExportToExcel(sec) As %String [ ZenMethod ] { hang sec q "excel" } } У меня на 10.2 отрабатывает без проблем ваш вариант.От браузера зависит: под Opera 12.11, IE 10, Chrome 23 я наблюдаю такую последовательность: жду n-секунд, потом метка появляется, затем alert и потом метка исчезает, что не есть правильно. под Firefox 16 последовательность правильная: я вижу появляющуюся метку, потом жду n-секунд, потом alert, затем метка пропадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 12:04 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
2acidАленочка, У меня на 10.2 отрабатывает без проблем ваш вариант. у меня Cache for Windows (x86-32) 2012.1.2 (Build 702) Fri May 4 2012 13:49:30 EDT первый раз у меня тоже отрабатывает, а вот второй и последующий разы - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 02:57 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
krvsa servit спасибо. заработало как надо) по поводу zenSetDeferredAction - не нашла описания в документации но эффект от выполнения один и тот же: zenSetDeferredAction(new Function("zenPage.exportToExcel();"),200); window.setTimeout('zenPage.exportToExcel();',200); ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 03:37 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
EvLaUy , спасибо за информацию ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 03:40 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Аленочкапо поводу zenSetDeferredAction - не нашла описания в документации но эффект от выполнения один и тот же: Т.е. с обычным Код: javascript 1.
так же работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 09:22 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
Аленочкапо поводу zenSetDeferredAction - не нашла описания в документацииЦитата из документацииBecause the library is written in JavaScript, which does not facilitate generated class documentation, there is no Class Reference documentation for it in the InterSystems online documentation system. Refer to this chapter for all details. источник Смотрите документацию в файле zenutils.js . Там Вы найдёте много полезных методов. Аленочкано эффект от выполнения один и тот же:Конечно, ведь в конечном итоге zenSetDeferredAction использует setTimeout . krvsaТ.е. с обычным Код: javascript 1.
так же работает?Почему бы и нет, если только синтаксис вызова подправить. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 09:56 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
servitПочему бы и нет, если только синтаксис вызова подправить. Так вот у меня в каком-то примере не работало... В csp проблем не имел. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 13:01 |
|
Не хватает изобретательности. Заморочка с label.
|
|||
---|---|---|---|
#18+
krvsaservitПочему бы и нет, если только синтаксис вызова подправить. Так вот у меня в каком-то примере не работало... В csp проблем не имел.Пример в студию. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2012, 13:30 |
|
|
start [/forum/topic.php?fid=39&msg=38046344&tid=1557305]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
126ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 323ms |
total: | 524ms |
0 / 0 |