|
|
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Пишу простенький dynamic action плагин. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Первый атрибут - список итемов для проверки. Второй атрибут - список кнопок, которые надо лочить, если хоть один из итемов пустой. Файл validator.js: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. Функция init_validators определена как точка входа в pl/sql коде плагина и внутри нее доступ к атрибутам осуществляется через this.action. А внутри функции reset получить доступ к этим атрибутам уже нельзя. пробовал решить это через глобальные переменные, но этот способ не подходит потому что если подключать плагин более одного раза на страницу то эти переменные затираются последующими вызовами. Какой подход поможет в данной ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2015, 19:44 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89, Тут очень простой выход. Внутри функции init_validators(), создай объект, из из любой другой обращайся к нему. Код: javascript 1. 2. 3. 4. Обращение к объекту Код: javascript 1. Ну это ближе к Яваскрипту уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 10:57 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
blkangel, Ах да, и функцию ресет внутри объекта надо разместить, тогда путаницы не будет. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 11:13 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
blkangel, И еще, для того чтобы объекты не пересекались. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 11:38 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
blkangel, при построении объекта происходит вот такая ошибка: Uncaught TypeError: Cannot read property 'attribute01' of undefined видимо потому что this уже не к контексту функции set_validators обращается, а к контексту объекта да и получить доступ потом извне никак. смысл в том что есть функция set_validators. она соответствующим полям привязывала обработчики их изменения: Код: javascript 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. а еще должна быть отдельная функция reset_interface, которая бы убирала у полей сообщения об ошибках и сбрасывала цвет в обычный. у меня до этого приходилось на странице вызывать ее так: reset_interface( ['P50_X1', 'P50_X2'], ['P50_B1', 'P50_B2'] ) и это работало. но хотелось бы чтобы эта функция имела доступ к атрибутам плагина и вызов был reset_interface(). правда тут еще проблема определить, к какому плагину соответствует этот вызов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 12:26 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89blkangel, при построении объекта происходит вот такая ошибка: Uncaught TypeError: Cannot read property 'attribute01' of undefined видимо потому что this уже не к контексту функции set_validators обращается, а к контексту объекта да и получить доступ потом извне никак. смысл в том что есть функция set_validators. она соответствующим полям привязывала обработчики их изменения: Виноват, так конечно: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 14:21 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
blkangelDiagnost89blkangel, при построении объекта происходит вот такая ошибка: Uncaught TypeError: Cannot read property 'attribute01' of undefined видимо потому что this уже не к контексту функции set_validators обращается, а к контексту объекта да и получить доступ потом извне никак. смысл в том что есть функция set_validators. она соответствующим полям привязывала обработчики их изменения: Виноват, так конечно: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Еще чутка исправления. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 14:22 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89blkangel, да и получить доступ потом извне никак. смысл в том что есть функция set_validators. она соответствующим полям привязывала обработчики их изменения: Код: javascript 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. а еще должна быть отдельная функция reset_interface, которая бы убирала у полей сообщения об ошибках и сбрасывала цвет в обычный. у меня до этого приходилось на странице вызывать ее так: reset_interface( ['P50_X1', 'P50_X2'], ['P50_B1', 'P50_B2'] ) и это работало. но хотелось бы чтобы эта функция имела доступ к атрибутам плагина и вызов был reset_interface(). правда тут еще проблема определить, к какому плагину соответствует этот вызов А тут давай подробно разбирать... 1. Раз ты делаешь плагин, он должен быть независим, и не требовать дописок яваскрипта на страницах. 2. Предположим, что ты делаешь API для своего плагина, и тебе надо все таки из вне вызывать функцию. Загвоздка в том, что dynamic_action_id ты никогда не вычислишь из вне, но тут напрашивается вывод сам собой, ты должен третьим атрибутом передавать название объекта. И получится примерно так. pl/sql упростится Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. javascript : Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Вызов функций внутри объекта, так. Код: javascript 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 14:36 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
В данный момент остановился на таком варианте: Код: javascript 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. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. на странице несколько регионов. чтобы очистить элементы на определенном регионе, на странице дописал такую строчку: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:23 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89, Ну я понял, что в итоге ты меня проигнорировал. Ответь мне вот на такой вопрос. Вот эти функции, ты где цепляешь к странице? Внутри плагина? Тогда, как же ты решил проблему многократного использования плагина? На странице? Тогда это полуплагин... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:31 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
по поводу вашего кода: вы в pl/sql не добавили 3-й атрибут и не написали про него что он должен содержать. я не очень понял. и еще: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. допустим я создам локальную переменную myObj внутри init_validators. но достучаться до нее будет нельзя извне этой функции. ситуация следующая: вот я создал на странице три региона. каждый из регионов изначально не отображается на странице, это делается через jquery ui dialog при нажатии на кнопку "добавить". в каждом регионе по два поля ввода и по одной кнопке. соответственно на странице 3 динамик экшена, каждый при Page Load выполняет мой плагин, который привязывает обработчики событий к соответствующим элементам. а теперь мне надо добавить следующую логику: при открытии каждого из этих регионов элементы интерфейса этого региона должны сбрасываться функцией reset_interface. сейчас проблема решена передачей в эту функцию id родительского региона. функция ищет в этом регионе элементы предопределенных классов ( у меня это not_empty_item и not_empty_button ) и работает с ними. по-другому вроде никак и не сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:33 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
ну сейчас это не совсем то, чего я добивался. но непонятно, как сделать так, чтобы работало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:39 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
вызов reset_interface происходит на странице... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:40 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89, Жестььььь........ Это называется, а не зайти ли мне с опы к данной проблеме. Извините за мат, НАХЕРА ПЛАГИН? Чтобы бы посложнее все остальным было разобраться? Почему нельзя повесить ПРОСТО обработчик? Ну давайте tot дальше пойдем, сделаем плагин региона(рисовать элементы будет), на который навесим плагин DA (обработчики вешать). Можно увидеть не решение задачи, а саму задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:44 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
в виде плагина я это оформил потому что планирую это на всех страницах впилить. с валидацией то все как раз хорошо. одна проблема только с получением атрибутов из других функций. вы предложили локальную переменную создать, но если к ней доступа извне нет то зачем это? сейчас не самое красивое, но рабочее решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 15:58 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89, Как любит тут один из наших постоянных посетителей форума выражаться, плагин нужен, если им можно и нужно управлять декларативно, если же для плагина нужно дописывать на каждой странице что то, то это хрень, а не плагин. Подход не правильный.... Создание индивидуального объекта, внутри плагина, решает проблему многоразового использования этого плагина. Почему вы не можете обратится к объекту из вне, я не понимаю... А так же рассмотрите такой вариант, он мне кажется куда проще, чем плагин, тем более, что с яваскриптом на ты. Объекты можно создавать динамически, например, вы определяете глобальную функцию, на весь апекс. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 16:44 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89, вы так и не ответили - цель вашего плагина. - есть штатная система валидации - есть штатная Read only - есть штатная для рендеринга Condition. Чем они не устроили? Возможно вы экономите на спичках, а 90 процентов времени будет уходить на логику страницы, а не на то что вы пишите. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 16:51 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
цель - сделать так, чтобы унифицированно проверялись поля. и если они введены неправильно то выводились сообщения об ошибках и блокировались кнопки на форме (например блокировалась кнопка "сохранить"). это сейчас решено и управляется декларативно. тут все ок. сама проблема в том что нужна еще функция, которая сбрасывает состояние региона в начальное состояние. сейчас она решена как раз не совсем хорошо - вызовом функции в футере региона. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. то есть если форму неправильно заполнили и потом закрыли то при открытии это уже не будет отображаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 17:50 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
а с вашим примером который вы уже много раз предложили я так и не могу разобраться. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 17:58 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89цель - сделать так, чтобы унифицированно проверялись поля. и если они введены неправильно то выводились сообщения об ошибках и блокировались кнопки на форме (например блокировалась кнопка "сохранить"). - Validations смотрели? Хотя я предпочитаю проверки на сервере в триггере. - DA - Event type - блокировка кнопок смотрели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2015, 18:31 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89а с вашим примером который вы уже много раз предложили я так и не могу разобраться. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 10:14 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
Diagnost89то есть если форму неправильно заполнили и потом закрыли то при открытии это уже не будет отображаться А вот тут не понял. Можно чтобы сохранялось, можно чтобы очищалось. Есть такое понятие как ClearCache, Апекс давно уже написал функцию, которая чистит поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 11:22 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
blkangel, +1 это веб. И тут трудно понять, что кому надо. Некоторые ждут - "с чистого листа, т.к. не сохраняли". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 11:25 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
указанный выше способ скорее для библиотеки, а не для конструктора. Не уверен что понимаю задачу, но вообще я знаю 3 способа взаимодействия с плагинами: 1. через массив, допустим Код: plsql 1. можно определить глобальную функцию, которая по входному параметру p_dynamic_action.id будет обращаться к значениям соответствующего экземпляра плагина на примере функции say: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Соответственно, обработчик hello по переданному ActionID реализует некоторый стандартный метод, обработчик GetObj по переданному ActionID возвращает object, в котором хранятся данные плагина. Тут вместо say будет init_validators (вызывается автоматически), вместо gObj скажем this.action, который дополнить значением ActionId и т.д. ActionId при вызове hello можно взять из apex_dictionary метод filter не работает в ie8, чтобы работало можно выполнить где-нибудь при инициализации что-нибудь вроде Код: plsql 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. 2. второй способ - вместо массива использовать события, которые рассылать элементам, над которыми плагин производит действия, внутрь можно передать необходимые данные т.е., например, добавляем в плагин событие myEvent плагин производит действие с элементом (допустим с Items-ом PX_MYITEM), после чего рассылает это событие: Код: javascript 1. 2. 3. 4. 5. 6. тогда можно создать Dynamic Action: Event: myEvent Selection Type: Jquery Selector jQuery Selector: #PX_MYITEM Внутри Action можно будет обратиться к данным плагина: alert(this.data.ItemList); 3. Третий способ - добавить атрибут, куда можно вписать обработчик яваскрипт при создании самого плагина, тогда обработчику можно будет предоставить необходимый интерфейс, через который можно обратиться к свойствам и методам, типа this.data и др. Но третий я бы не рекоммендовал делать в большинстве случаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 11:28 |
|
||
|
Доступ к атрибутам плагина из javascript
|
|||
|---|---|---|---|
|
#18+
4. Можно еще создать глобальные методы с динамическими именами на основе p_dynamic_action.id, потом поизвращаться с функцией eval, или яваскрипт код генерировать динамически через pl/sql, но я не думаю, что это правильный подход, т.к. использование eval считается плохим тоном, точно так же как делать зависимым яваскрипт от pl/sql слишком сильно. Впрочем он может иметь смысл с плагинами другого типа, когда плагин генерирует html на основе элементов с определенными именами, тогда плагин может догенерировать элементы с похожими именами, (например элемент имя item + приставка "_display" и т.д), но такой подход не подходит для данного вида плагина по архитектурным соображениям, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 12:00 |
|
||
|
|

start [/forum/topic.php?fid=50&fpage=34&tid=1875075]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 342ms |

| 0 / 0 |
