Как получить идентификатор портлета на стороне клиента в 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:

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

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

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) {
    }
);
Другие вопросы по тегам