Как получить идентификатор портлета на стороне клиента в liferay?
Я использую AlloyUI в своем портлете liferay.
Я хочу использовать мой <input>
Идентификатор в javascript. Проблема в том, что id элементов изменен на стороне клиента.
Например:
Если я установлю <input>
Идентификатор "username" изменен на _hospital_WAR_hospitalportlet_userName
т.е. _hospital_WAR_hospitalportlet_
добавляется к идентификатору, где Hospital
мое имя портлета
Как я могу получить идентификатор на стороне клиента, чтобы я мог использовать его в jquery?
2 ответа
Строка _hospital_WAR_hospitalportlet_
приурочен к Id
из <input>
это не что иное, как пространство имен портлета.
Это только добавлено к вашему <input>
"s name
& id
атрибут, если вы используете <aui:input>
тег и name
& id
атрибуты не изменяются, если вы просто используете обычный HTML <input>
тег.
Но так как это хорошая практика для использования <aui:input>
вы можете сделать следующее, чтобы получить пространство имен портлета в вашем коде JavaScript:
Если вы используете JavaScript внутри JSP, т. Е. Используя в
<script> .. </script>
или же<aui:script> .. </aui:script>
тогда вы можете использовать<portlet:namespace />
или же<%= renderResponse.getNamespace() %>
чтобы получить строку_hospital_WAR_hospitalportlet_
внутри вашего JavaScript, что-то вроде.jQuery("#<portlet:namespace />username").val(); // Or jQuery("#<%= renderResponse.getNamespace() %>username").val();
Но если вы используете
*.js
Затем я предлагаю вам передать пространство имен в качестве аргумента функции javascript вjs
файл:function changeValues(portletNamespace) { // this function is in a js file jQuery("#" + portletNamespace + "username").val("Lets change"); }
вызов этой функции из JSP:
<input type="button" onClick="changeValues('<portlet:namespace />')" />
Надеюсь это поможет. Я не знаю, есть ли способ получить namespace
или же portletId
непосредственно через некоторую функцию JavaScript, определенную Liferay. Если вы получили что-то подобное, вы можете опубликовать это здесь, и это было бы очень полезно.
Попробуй это:
Liferay.Portlet.ready(
/*
This function gets loaded after each and every portlet on the page.
portletId: the current portlet's id
node: the Alloy Node object of the current portlet
*/
function(portletId, node) {
}
);