2012-12-10 17 views
6

Sto usando AlloyUI nel mio portlet liferay.Come ottenere l'id portlet lato client in liferay?

Desidero utilizzare l'ID di <input> in javascript. Il problema è che l'id degli elementi è cambiato nel lato client.

Per esempio:
Se ho impostato un <input> s' Id al 'username' è cambiato in _hospital_WAR_hospitalportlet_userName cioè _hospital_WAR_hospitalportlet_ viene aggiunto l'Es, dove Hospital è il mio nome portlet.

Come posso ottenere l'ID lato client in modo che possa essere utilizzato in jQuery?

risposta

7

La stringa _hospital_WAR_hospitalportlet_ anteposta allo Id dello <input> non è altro che lo spazio dei nomi dei portlet.

Questo viene anteposto soltanto al vostro 's attributo <input>name & id se si utilizza <aui:input> tag e le name & id attributi non vengono modificati se si utilizza plain-vanilla html <input> tag.

Ma come è buona norma utilizzare <aui:input> è possibile effettuare le seguenti operazioni per ottenere il portlet-namespace nel codice javascript:

  1. Se si utilizza javascript all'interno di una JSP utilizzando cioè entro <script> .. </script> o <aui:script> .. </aui:script> quindi è possibile utilizzare <portlet:namespace /> o <%= renderResponse.getNamespace() %> per ottenere la stringa _hospital_WAR_hospitalportlet_ all'interno del javascript, qualcosa di simile.

    jQuery("#<portlet:namespace />username").val(); 
    
    // Or 
    
    jQuery("#<%= renderResponse.getNamespace() %>username").val(); 
    
  2. Ma se si utilizza un file *.js allora vi consiglio di passare lo spazio dei nomi come argomento per la funzione javascript nel file js:

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

    chiamare questa funzione dalla JSP:

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

Spero che questo aiuti. Non so se c'è un modo per ottenere il namespace o portletId direttamente attraverso una funzione javascript definita da Liferay. Se ottieni qualcosa del genere puoi postarlo qui e sarebbe molto utile.

4

Prova questo:

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