Как получить идентификатор портлета на стороне клиента в liferay?

Я использую AlloyUI в своем портлете liferay.

Я хочу использовать свой идентификатор <input> в javascript. Проблема в том, что идентификаторы элементов меняются на стороне клиента.

Например:
Если я задаю идентификатор <input> как "имя пользователя", он изменяется на _hospital_WAR_hospitalportlet_userName, т. е. _hospital_WAR_hospitalportlet_ добавляется к идентификатору, где Hospital — имя моего портлета.

Как я могу получить идентификатор на стороне клиента, чтобы использовать его в jquery?


person Beginner    schedule 10.12.2012    source источник


Ответы (2)


Строка _hospital_WAR_hospitalportlet_, предшествующая Id строки <input>, представляет собой не что иное, как пространство имен портлета.

Это добавляется к атрибуту name и id вашего <input> только в том случае, если вы используете тег <aui:input>, а атрибуты name и id не изменяются, если вы просто используете обычный HTML-тег <input>.

Но поскольку использование <aui:input> является хорошей практикой, вы можете сделать следующее, чтобы получить пространство имен портлета в коде javascript:

  1. Если вы используете javascripts внутри 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();
    
  2. Но если вы используете файл *.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. Если у вас есть что-то подобное, вы можете опубликовать это здесь, и это будет очень полезно.

person Prakash K    schedule 11.12.2012

Попробуй это:

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) {
    }
);
person WelcomeTo    schedule 20.10.2013