2012-12-10 10 views
6

Ich verwende AlloyUI in meinem Liferay-Portlet.Wie bekomme ich clientseitige Portlet-ID in liverey?

Ich möchte meine <input> ‚s id in Javascript verwenden. Das Problem ist, dass die ID der Elemente auf der Client-Seite geändert wird.

Zum Beispiel:
Wenn ich gesetzt ein <input> ‚s Id‚username‘es geändert wird _hospital_WAR_hospitalportlet_userName heißt _hospital_WAR_hospitalportlet_ auf die ID angehängt wird, wo Hospital mein Portletnamen ist.

Wie kann ich die clientseitige Id so, dass ich es in jquery verwenden kann?

Antwort

7

Die Zeichenfolge _hospital_WAR_hospitalportlet_, die der Id der <input> vorangestellt ist, ist nichts anderes als der Portlet-Namespace.

Dies ist nur zu Ihrem <input> ‚s name & id Attribut vorangestellt, wenn Sie <aui:input>-Tag und die name & id Attribute nicht geändert werden, wenn Sie nur Plain-Vanilla html <input> Tag verwenden.

Aber wie ist es eine gute Praxis <aui:input> verwenden Sie das Portlet-Namespace in Ihrem JavaScript-Code folgendes erhalten tun können:

  1. Wenn Sie Javascripts in einer JSP dh unter Verwendung innerhalb <script> .. </script> verwenden oder <aui:script> .. </aui:script> dann können Sie <portlet:namespace /> oder <%= renderResponse.getNamespace() %> verwenden, um die Zeichenfolge _hospital_WAR_hospitalportlet_ in Ihrem Javascript, etwas wie zu bekommen.

    jQuery("#<portlet:namespace />username").val(); 
    
    // Or 
    
    jQuery("#<%= renderResponse.getNamespace() %>username").val(); 
    
  2. Aber wenn Sie eine *.js Datei verwenden, dann empfehle ich Ihnen den Namespace als Argument an die JavaScript-Funktion in der js Datei übergeben:

    function changeValues(portletNamespace) { // this function is in a js file 
        jQuery("#" + portletNamespace + "username").val("Lets change"); 
    } 
    

    diese Funktion von der JSP Aufruf:

    <input type="button" onClick="changeValues('<portlet:namespace />')" /> 
    

Hoffnung, das hilft. Ich weiß nicht, ob es einen Weg gibt, die namespace oder portletId direkt durch eine von Liferay definierte JavaScript-Funktion zu bekommen. Wenn du so etwas bekommst, kannst du es hier posten und das wäre sehr hilfreich.

4

Versuchen Sie folgendes:

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) { 
    } 
);