|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Как можно запустить какой-нибудь метод, который срабатывает при созданий нового объекта в классе с которым связан TablePane. Как называется это событие? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2013, 16:02 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.Talgat , <tablePane> Я вижу два вопроса, а не один, из которых мало что понятно:
Если это так, то нужно делать либо автообновление страницы по аналогии с Порталом, либо вручную обновить таблицу . Готовых событий <tablePane> для этого не предоставляет. PS: рекомендую к изучению Учебное пособие «Технология ZEN / PROTOTYPE 6» ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 11:32 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
servit Sabyrov.Talgat , Я вижу два вопроса, а не один, из которых мало что понятно:
Я так понял, что нужно узнать, произошли ли изменения в классе, с которым связан <tablePane> и в событие, которое при этом выполняется - что-то сделать. Соответственно вопрос, что это за событие. Но это моя интерпретация. Но <tablePane> может наполняться разными данными (запрос из любого набора классов). Поэтому не совсем понятно, какой класс при этом проверяется. Другое дело, что есть <dataController>, который может быть связан с определенным классом. Я нашел только метод "raiseDataChange" компонента <dataController>: <dataController> Methods . Но, боюсь, автор уже решил свою задачу за это время. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 13:30 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
servit, Есть класс, этот класс связан с tablePane(tableName="класс"). На зен странице ничего не происходит, никакая кнопка не нажимается,ничего не делается, есть только открытая зен страница. В Класс был добавлен новый обьект(но страница стоит не тронутой), и в этот момент срабатывает некий метод. Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 14:41 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.Talgatservit, Есть класс, этот класс связан с tablePane(tableName="класс"). На зен странице ничего не происходит, никакая кнопка не нажимается,ничего не делается, есть только открытая зен страница. В Класс был добавлен новый обьект(но страница стоит не тронутой), и в этот момент срабатывает некий метод. Как это сделать? Т.е. клиенты сидят такие у себя в браузерах... Ни о чем не подозревают... А сервер бац! И перезагрузил им всем таблички. Так челе? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 14:49 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.Talgatservit, Есть класс, этот класс связан с tablePane(tableName="класс"). На зен странице ничего не происходит, никакая кнопка не нажимается,ничего не делается, есть только открытая зен страница. В Класс был добавлен новый обьект(но страница стоит не тронутой), и в этот момент срабатывает некий метод. Как это сделать? Может быть это все-таки не про TablePane, а про %OnNew/%OnAfterSave и прочие колл-бэки в хранимом классе? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 14:53 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.Talgat , То есть моя догадка подтвердилась. Cмотрите в сторону <timer> . Как справедливо заметил imdb, <tablePane> может отображать данные из "ниоткуда", например<tablePane id="table" sql="SELECT 1 ID,'bla-bla-bla' Name,? T" > <parameter value="Z"/> </tablePane>, или использовать режим snapshot. Поэтому для Вашего случая подходит только автообновление с явным вызовом executeQuery(). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 14:56 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Шваров ЕвгенийМожет быть это все-таки не про TablePane, а про %OnNew/%OnAfterSave и прочие колл-бэки в хранимом классе?В том то и дело, что ТС хочет добавить явную зависимость слоя хранения к слою отображения, что, по-моему, недопустимо. И MVC , упомянутый выше imdb, здесь не поможет, поскольку <tablePane> его нативно не поддерживает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 15:12 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
krvsaТ.е. клиенты сидят такие у себя в браузерах... Ни о чем не подозревают... А сервер бац! И перезагрузил им всем таблички. Так челе?Именно так. Возможно, ТС делает систему торгов на бирже, где нужно постоянно видеть быстро меняющиеся данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 15:17 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
servitИменно так. Сервер никогда не опрашивает клиентов. Это клиент должен работать таким образом. Это именно клиенты опрашивают сервер на предмет каких-то изменений на нем... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 15:24 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
krvsaservitИменно так. Сервер никогда не опрашивает клиентов. Это клиент должен работать таким образом. Это именно клиенты опрашивают сервер на предмет каких-то изменений на нем...В свете последних технологий это не совсем верно. есть веб-сокеты, где никто никого не опрашивает а просто шлет необходимые данные и на них и отвечать не обязательно, и в данном случае сервер сам может слать запросы на клиент внутри веб-сокета. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 15:29 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
krvsa , Именно по такому принципу работают веб-чаты на веб-сокетах. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 15:38 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
krvsa, когда с кем то переписываешься по чату, так и случается ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 12:38 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Шваров Евгений, в методе %OnAfterSave как определять класс, в каком классе создался обьект? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2013, 16:27 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.TalgatШваров Евгений, в методе %OnAfterSave как определять класс, в каком классе создался обьект? ..%ClassName() ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2013, 17:07 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Шваров Евгений, есть какой - нибудь пример? а то не ясно что куда писать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2013, 17:33 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.Talgat, У каждого наследника %RegisteredObject есть метод %ClassName(), возвращающий класс инстанса. Можно также $ClassName() функцию использовать - возвращает текущий класс контекста. Примеры обоих вариантов и даже больше здесь . ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2013, 23:37 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Шваров Евгений, есть такой вариант<timer ontimeout = "zenPage.timeout(zenThis);" timeout="1000"/> <tablePane valueColumn="ID" id="Table" name="Table" tableName="DATA.User"> </tablePane> в этом методе обновляет tablePane каждую секунду. Я пытаюсь вывести сообщение(alert("blabla")), если добавился новый объект в класс DATA.User(связан с tablePane).ClientMethod timeout(timer) [ Language = javascript ] { var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane var t = zenPage.getComponentById("TableManager"); t.executeQuery(); //обновляем таблицу var t2 = t.getProperty("rowCount"); //берем количество строк в tablePane после обновление if (t2>t1) { alert("blabla"); } } Если с другой страницы добавлен объект в класс DATA.User, то в этой странице в tablePane этот объект появляется(т.к. обновляется), но не выводит сообщение "blabla". В чем проблема? Есть другие варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 20:03 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.TalgatЕсли с другой страницы добавлен объект в класс DATA.User, то в этой странице в tablePane этот объект появляется(т.к. обновляется), но не выводит сообщение "blabla". В чем проблема? Есть другие варианты? Может дело в том, что таймер срабатывает только один раз? В данном примере таймер сработает только один раз. Чтобы он продолжал работать надо добавить в код: timer.startTimer(); ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 09:18 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.TalgatClientMethod timeout(timer) [ Language = javascript ] { var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane var t = zenPage.getComponentById("TableManager"); t.executeQuery(); //обновляем таблицу var t2 = t.getProperty("rowCount"); //берем количество строк в tablePane после обновление if (t2>t1) { alert("blabla"); } } Т.е. код будет выглядеть так:ClientMethod timeout(timer) [ Language = javascript ] { var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane var t = zenPage.getComponentById("TableManager"); t.executeQuery(); //обновляем таблицу var t2 = t.getProperty("rowCount"); //берем количество строк в tablePane после обновление if (t2>t1) { alert("blabla"); } // Перезапуск таймера timer.startTimer(); } ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 09:24 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
imdb, пробовал уже так все тот же результат, может в tablePane или в dataController есть какие нибудь события? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 10:21 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Sabyrov.Talgatimdb, пробовал уже так все тот же результат, может в tablePane или в dataController есть какие нибудь события? В данном варианте кода переменная t2 берет старое значение количества строк (равное t1), т.к. запрос был отправлен, но результатов он не ждет. Поэтому переменные t1 и t2 равны и сообщение не выводится. Но можно изменить код следующим образом:ClientMethod timeout(timer) [ Language = javascript ] { var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane // в текст страницы необходимо добавить скрытую переменную: <hidden id="update" value="" /> var old = zenPage.getComponentById("update").getValue(); if ((old!="")&&(t1!=old)) { alert("Были изменения"); } zenPage.getComponentById("update").setValue(t1); var t = zenPage.getComponentById("TableManager"); t.executeQuery(); //обновляем таблицу timer.startTimer(); } ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 13:41 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
imdb, Спасибо большое работает)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 13:57 |
|
Событие в TablePane
|
|||
---|---|---|---|
#18+
Или ещё проще:Class demo.test Extends %ZEN.Component.page { XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ] { <page xmlns=" http://www.intersystems.com/zen" title=""> <timer ontimeout = "zenPage.timeout(zenThis);" timeout="1000"/> <tablePane valueColumn="ID" id="TableManager" tableName="DATA.User"/> </page> } ClientMethod timeout(timer) [ Language = javascript ] { var t = zen("TableManager"); var t1 = t.getProperty("rowCount"); // берём количество строк в tablePane t.refreshContents(true); // обновляем таблицу синхронно var t2 = t.getProperty("rowCount"); // берём количество строк в tablePane после обновление if (t2>t1) { zenAlert("blabla"); } timer.startTimer(); // перезапуск таймера } } ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 18:14 |
|
|
start [/forum/topic.php?fid=39&fpage=26&tid=1557111]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 210ms |
0 / 0 |