Регистрация  |  Вход

Как представляется Apex:Component на Apex:Page

Здравствуйте!

Как несколько компонент представляються на одной странице, если мы в каждой компоненте можем задавать теги (html) с одинаковым ид.?

И можно както витянуть на apex:page значение поля с компонента с помощу js?, или поставить на компоненту онлоад действие, которое работает с айдишниками html тегов.

Здравствуйте!

Как несколько компонент представляються на одной странице, если мы в каждой компоненте можем задавать теги  (html) с одинаковым ид.? 

И можно както витянуть на apex:page значение поля с компонента с помощу js?, или поставить на компоненту онлоад действие, которое работает с айдишниками html тегов.

Здесь несколько вопросов и несколько ответов.

(1) в теории существование нескольких тегов с одним айди возможно, но JS с ними не будет работать корректно.

(2) указывая атрибут ID on APEX:something это несколько др история. как я заметил эти айди нужны только для связки между разными ВФ компонентами, и в реальной разметке они заменяются (!) на другие айди (не те что указывал), в результате я не мог получить c помощью JS элемент по указанному айди.
И возращаясь к первому вопросу - а могут ли существовать ВФ компоненты с одиноковым значение в атрбуте ID. Я не уверен что можно сохранить разметку с одиноковыми ID...

(3) ну и главное: как же получить в JS переменную html тег сгенерированный ВФ компоненотом?
я выставляю атрибут styleClass - то есть в финале это будет просто класс.

по нему я получаю с помощью jQUery (если она используется на странице) или с помощью небольшой функции массив элеметов с таким классов, обращаюсь у первому из них (если он один) и получаю его значение (если это инпут:

var chtoTamVEtomInput = inputs[0].value;

alert(chtoTamVEtomInput );

Здесь несколько вопросов и несколько ответов.

(1) в теории существование нескольких тегов с одним айди возможно, но JS с ними не будет работать корректно.

(2) указывая атрибут ID on APEX:something это несколько др история. как я заметил эти айди нужны только для связки между разными ВФ компонентами, и в реальной разметке они заменяются (!) на другие айди (не те что указывал), в результате я не мог получить c помощью JS элемент по указанному айди.
И возращаясь к первому вопросу - а могут ли существовать ВФ компоненты с одиноковым значение в атрбуте ID. Я не уверен что можно сохранить разметку с одиноковыми ID...

(3) ну и главное: как же получить в JS переменную html тег сгенерированный ВФ компоненотом?
я выставляю атрибут styleClass - то есть в финале это будет просто класс.

по нему я получаю с помощью jQUery (если она используется на странице) или с помощью небольшой функции массив элеметов с таким классов, обращаюсь у первому из них (если он один) и получаю его значение (если это инпут: 

[code]var chtoTamVEtomInput = inputs[0].value;

alert(chtoTamVEtomInput );[/code]

Ухти, Спасибо, styleClass помогло

Ухти, Спасибо, styleClass  помогло

Den Brown
Здесь несколько вопросов и несколько ответов.

(1) в теории существование нескольких тегов с одним айди возможно, но JS с ними не будет работать корректно.

(2) указывая атрибут ID on APEX:something это несколько др история. как я заметил эти айди нужны только для связки между разными ВФ компонентами, и в реальной разметке они заменяются (!) на другие айди (не те что указывал), в результате я не мог получить c помощью JS элемент по указанному айди.
И возращаясь к первому вопросу - а могут ли существовать ВФ компоненты с одиноковым значение в атрбуте ID. Я не уверен что можно сохранить разметку с одиноковыми ID...

(3) ну и главное: как же получить в JS переменную html тег сгенерированный ВФ компоненотом?
я выставляю атрибут styleClass - то есть в финале это будет просто класс.

по нему я получаю с помощью jQUery (если она используется на странице) или с помощью небольшой функции массив элеметов с таким классов, обращаюсь у первому из них (если он один) и получаю его значение (если это инпут:

var chtoTamVEtomInput = inputs[0].value;

alert(chtoTamVEtomInput );


На счет 2 пункта ты не прав. Сделай в странице <apex:repeat><c:component id="test"><apex:repeat> и ты будешь удивлен. По крайней мере в 27 и 28 API у компонент были одинаковые ID.

3. Получается все достаточно легко var value = jQuery('[id$="theGrid"]').val();

[quote="Den Brown"]Здесь несколько вопросов и несколько ответов.

(1) в теории существование нескольких тегов с одним айди возможно, но JS с ними не будет работать корректно.

(2) указывая атрибут ID on APEX:something это несколько др история. как я заметил эти айди нужны только для связки между разными ВФ компонентами, и в реальной разметке они заменяются (!) на другие айди (не те что указывал), в результате я не мог получить c помощью JS элемент по указанному айди.
И возращаясь к первому вопросу - а могут ли существовать ВФ компоненты с одиноковым значение в атрбуте ID. Я не уверен что можно сохранить разметку с одиноковыми ID...

(3) ну и главное: как же получить в JS переменную html тег сгенерированный ВФ компоненотом?
я выставляю атрибут styleClass - то есть в финале это будет просто класс.

по нему я получаю с помощью jQUery (если она используется на странице) или с помощью небольшой функции массив элеметов с таким классов, обращаюсь у первому из них (если он один) и получаю его значение (если это инпут: 

[code]var chtoTamVEtomInput = inputs[0].value;

alert(chtoTamVEtomInput );[/code][/quote]


На счет 2 пункта ты не прав. Сделай в странице <apex:repeat><c:component id="test"><apex:repeat> и ты будешь удивлен. По крайней мере в 27 и 28 API у компонент были одинаковые ID. 

3. Получается все достаточно легко var value = jQuery('[id$="theGrid"]').val();

wilder
3. Получается все достаточно легко var value = jQuery('[id$="theGrid"]').val();

незнакомый мне синтаксис... в котором получаем элемент по ID... но не понятно:
(1) как можно получить элемент который рендерится ВФ тегом по его ID, если указанный тобой ID в финальной разметке заменяется на другой, технический? или он не заменяется, а остается как есть, и я ошибаюсь?!
(2) или, если ID все-таки заменятся на другой, что еще интереснее, можно ли в JS code вставлять ID VF элемента, и сделать так, чтобы этот ID заменился на соответствующий технический ID того элемента в момент генерации разметки?!

[quote="wilder"]
3. Получается все достаточно легко var value = jQuery('[id$="theGrid"]').val();[/quote]

незнакомый мне синтаксис... в котором получаем элемент по ID... но не понятно:
(1) как можно получить элемент который рендерится ВФ тегом по его ID, если указанный тобой ID в финальной разметке заменяется на другой, технический? или он не заменяется, а остается как есть, и я ошибаюсь?!
(2) или, если ID все-таки заменятся на другой, что еще интереснее, можно ли в JS code вставлять ID VF элемента, и сделать так, чтобы этот ID  заменился на соответствующий технический ID того элемента в момент генерации разметки?!

все очень просто.

ID из VF тега действительно изменяется. К нему вначале добавляется "абракадабка". Напрямую получить элемент по такому ID действительно не получится.
Но для этой цели есть очень простой хук, который и показал wilder
jQuery('[id$="theGrid"]') , где theGrid - это ID который ты указал в VF теге. А делает эта команда следующее - выбирает все элементы у которых ID заканчивается на theGrid, т.е. спокойно находит твой html элемент сгенерированный из VF элемента.

все очень просто.

ID из VF тега действительно изменяется. К нему вначале добавляется "абракадабка". Напрямую получить элемент по такому ID действительно не получится. 
Но для этой цели есть очень простой хук, который и показал wilder
jQuery('[id$="theGrid"]') , где theGrid - это ID который ты указал в VF теге. А делает эта команда следующее - выбирает все элементы у которых ID заканчивается на theGrid, т.е. спокойно находит твой html элемент сгенерированный из VF элемента.

Dmitry Shnyrev
все очень просто.

ID из VF тега действительно изменяется. К нему вначале добавляется "абракадабка". Напрямую получить элемент по такому ID действительно не получится.
Но для этой цели есть очень простой хук, который и показал wilder
jQuery('[id$="theGrid"]') , где theGrid - это ID который ты указал в VF теге. А делает эта команда следующее - выбирает все элементы у которых ID заканчивается на theGrid, т.е. спокойно находит твой html элемент сгенерированный из VF элемента.


Если ты знаешь точно ID элемента то получить его можно даже с абракадаброй если специальные регексы.

[quote="Dmitry Shnyrev"]все очень просто.

ID из VF тега действительно изменяется. К нему вначале добавляется "абракадабка". Напрямую получить элемент по такому ID действительно не получится. 
Но для этой цели есть очень простой хук, который и показал wilder
jQuery('[id$="theGrid"]') , где theGrid - это ID который ты указал в VF теге. А делает эта команда следующее - выбирает все элементы у которых ID заканчивается на theGrid, т.е. спокойно находит твой html элемент сгенерированный из VF элемента.[/quote]
Если ты знаешь точно ID элемента то получить его можно даже с абракадаброй если специальные регексы.

Sergey Prichepo
Dmitry Shnyrev
все очень просто.

ID из VF тега действительно изменяется. К нему вначале добавляется "абракадабка". Напрямую получить элемент по такому ID действительно не получится.
Но для этой цели есть очень простой хук, который и показал wilder
jQuery('[id$="theGrid"]') , где theGrid - это ID который ты указал в VF теге. А делает эта команда следующее - выбирает все элементы у которых ID заканчивается на theGrid, т.е. спокойно находит твой html элемент сгенерированный из VF элемента.


Если ты знаешь точно ID элемента то получить его можно даже с абракадаброй если специальные регексы.

к сожалению REGEX не работает в IE8.

[quote="Sergey Prichepo"][quote="Dmitry Shnyrev"]все очень просто.

ID из VF тега действительно изменяется. К нему вначале добавляется "абракадабка". Напрямую получить элемент по такому ID действительно не получится. 
Но для этой цели есть очень простой хук, который и показал wilder
jQuery('[id$="theGrid"]') , где theGrid - это ID который ты указал в VF теге. А делает эта команда следующее - выбирает все элементы у которых ID заканчивается на theGrid, т.е. спокойно находит твой html элемент сгенерированный из VF элемента.[/quote]
Если ты знаешь точно ID элемента то получить его можно даже с абракадаброй если специальные регексы.[/quote]

к сожалению REGEX не работает в IE8.

А вот это уже другое дело.

Осталось только попросить Вас дать функцию, которая выберет из ДОМа элемент(ы), у которого ID заканчивается на искомый фрагмент, ведь далеко не всегда есть необходимость ставить на страницу jQuery.

спасибо

А вот это уже другое дело.

Осталось только попросить Вас дать функцию, которая выберет из ДОМа элемент(ы), у которого ID заканчивается на искомый фрагмент, ведь далеко не всегда есть необходимость ставить на страницу  jQuery.

спасибо

Den Brown
А вот это уже другое дело.

Осталось только попросить Вас дать функцию, которая выберет из ДОМа элемент(ы), у которого ID заканчивается на искомый фрагмент, ведь далеко не всегда есть необходимость ставить на страницу jQuery.

спасибо


Если мы говорим про простой javascript тогда тебе надо сделать предварительную выборку почем нибудь использовать indexOf('eeee') != -1 и использовать какой нибудь массив для отсортированных элеметов.Либо еще один вариант получить имя Ids и string.split('').reverse().join(''); использовать substr поколичеству первых симвлов.LastIndexOf метод тоже подойдет.также можно использовать length отнять количетво нужных последних символов и посмотреть какой subtring получился.

Я всегда подключаю jquery c ним очень просто работать. по селекторам.

[quote="Den Brown"]А вот это уже другое дело.

Осталось только попросить Вас дать функцию, которая выберет из ДОМа элемент(ы), у которого ID заканчивается на искомый фрагмент, ведь далеко не всегда есть необходимость ставить на страницу  jQuery.

спасибо[/quote]
Если мы говорим про простой javascript тогда тебе надо сделать предварительную выборку почем нибудь использовать indexOf('eeee') != -1 и использовать какой нибудь массив для отсортированных элеметов.Либо еще один вариант получить имя Ids и string.split('').reverse().join(''); использовать substr поколичеству первых симвлов.LastIndexOf метод тоже подойдет.также можно использовать length отнять количетво нужных последних символов и посмотреть какой subtring получился.

Я всегда подключаю jquery c ним очень просто работать. по селекторам.

wilder
к сожалению REGEX не работает в IE8.

не знал спасибо.Обязательно проверю.

[quote="wilder"]
к сожалению REGEX не работает в IE8.[/quote]
не знал спасибо.Обязательно проверю.

Я всегда подключаю jquery c ним очень просто работать. по селекторам.

именно так,тем более что сделать это не просто а ОЧЕНЬ просто, особенно если использовать google CDN

Вот строчка - вставляешь в любую VF страницу и у тебя jQuery
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

(https://developers.google.com/speed/libraries/devguide#jquery)

Но только это между нами. Вообще так нельзя делать, особенно на продах. Мало ли что там Google тебе может подсунуть вместо jQuery ;). Хотя наверное у меня доверие я Google больше чем к своему локальному серверу.

[quote]Я всегда подключаю jquery c ним очень просто работать. по селекторам.[/quote]

:) именно так,тем более что сделать это не просто а ОЧЕНЬ просто, особенно если использовать google CDN

Вот строчка - вставляешь в любую VF страницу и у тебя jQuery :)

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

([url]https://developers.google.com/speed/libraries/devguide#jquery[/url])

Но только :) это между нами. Вообще так нельзя делать, особенно на продах. Мало ли что там Google тебе может подсунуть вместо jQuery ;). Хотя наверное у меня доверие я Google больше чем к своему локальному серверу.

Случайно нашел как получать "динамический" (заменяемый на актуальный в момент отдачи страницы) ID для VF компонентов:

https://www.salesforce.com/us/developer/docs/pages/Content/pages_best_practices_accessing_id.htm

For example, use $Component.itemId to reference a component at the same level in the Visualforce component hierarchy, or use $Component.grandparentId.parentId.itemId to specify a more complete component path.

Случайно нашел как получать "динамический" (заменяемый на актуальный в момент отдачи страницы) ID для VF компонентов:

[url]https://www.salesforce.com/us/developer/docs/pages/Content/pages_best_practices_accessing_id.htm[/url]

[quote]For example, use $Component.itemId to reference a component at the same level in the Visualforce component hierarchy, or use $Component.grandparentId.parentId.itemId to specify a more complete component path.[/quote]

Den Brown
Случайно нашел как получать "динамический" (заменяемый на актуальный в момент отдачи страницы) ID для VF компонентов:

https://www.salesforce.com/us/developer/docs/pages/Content/pages_best_practices_accessing_id.htm

For example, use $Component.itemId to reference a component at the same level in the Visualforce component hierarchy, or use $Component.grandparentId.parentId.itemId to specify a more complete component path.

У меня такой подход работает только в пределах одной формы и только для случая если элемент, который нужно обновить находится выше, чем экшен, который обновляет этот элемент.

[quote="Den Brown"]Случайно нашел как получать "динамический" (заменяемый на актуальный в момент отдачи страницы) ID для VF компонентов:

[url]https://www.salesforce.com/us/developer/docs/pages/Content/pages_best_practices_accessing_id.htm[/url]

[quote]For example, use $Component.itemId to reference a component at the same level in the Visualforce component hierarchy, or use $Component.grandparentId.parentId.itemId to specify a more complete component path.[/quote][/quote]

У меня такой подход работает только в пределах одной формы и только для случая если элемент, который нужно обновить находится выше, чем экшен, который обновляет этот элемент.

Случайно нашел как получать "динамический" (заменяемый на актуальный в момент отдачи страницы) ID для VF компонентов:
https://www.salesforce.com/us/developer ... ing_id.htm

Я так работал с ID когда только начал работать. Очень ненадежный способ - по непонятным мне причинам в то время данный метод не всегда возвращал ID элемента. Было что-то похоже на области видимости. Ну короче полный бред - ломал этот способ долго, пока старшие браться не посоветовали jQuery('[id$="someId"]')

[quote]Случайно нашел как получать "динамический" (заменяемый на актуальный в момент отдачи страницы) ID для VF компонентов:
[url]https://www.salesforce.com/us/developer[/url] ... ing_id.htm[/quote]

Я так работал с ID когда только начал работать. Очень ненадежный способ - по непонятным мне причинам в то время данный метод не всегда возвращал ID элемента. Было что-то похоже на области видимости. Ну короче полный бред - ломал этот способ долго, пока старшие браться не посоветовали jQuery('[id$="someId"]')
:)