2012-12-10 84 views
6

我在我的liferay portlet中使用AlloyUI。如何在liferay中獲取客戶端portlet-id?

我想在JavaScript中使用我的<input>的ID。問題是元素的ID在客戶端更改。

例如:
如果設置一個<input>的ID設置爲‘用戶名’,它被改變成_hospital_WAR_hospitalportlet_userName_hospital_WAR_hospitalportlet_被附加到ID,其中Hospital是我的組件名稱。

我如何獲得客戶端ID,以便我可以在jQuery中使用它?

回答

7

<input>Id前面的字符串_hospital_WAR_hospitalportlet_不過是portlet命名空間。

此,如果您使用<aui:input>標籤只預置到您的<input>name & id屬性,如果你只是用普通的香草HTML <input>標籤name & id屬性沒有改變。

但因爲它是使用<aui:input>,你可以做以下,以獲得portlet的命名空間在你的JavaScript代碼的好做法:

  1. 如果您使用的使用中<script> .. </script>或JSP,即內部的JavaScript <aui:script> .. </aui:script>然後你可以使用<portlet:namespace /><%= renderResponse.getNamespace() %>在你的javascript裏面得到字符串_hospital_WAR_hospitalportlet_,就像。

    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 />')" /> 
    

希望這會有所幫助。我不知道是否有辦法直接通過Liferay定義的某個JavaScript函數獲取namespaceportletId。如果你有這樣的東西,你可以在這裏發佈,這將是非常有益的。

4

試試這個:

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