2017-04-11 16 views
1

試圖在客戶端JavaScript中使用自定義屬性(通過compositeData),但它不起作用。X頁面:無法訪問CSJS中的自定義屬性[已更新]

用戶選擇一個不同的值,因此onChange事件觸發。我能夠抓住我想要的字符串(refreshOnChangeID)並將其放入我的變量y中。我做了一個警告,我得到了正確的值(「fld4b」)。

然後代碼執行XSP.partialRefreshPost。如果我硬編碼字段,那麼我正在進行部分刷新。

但是,放入var(在註釋掉的最後一行)不起作用。該id解決爲沒有。

我在做什麼錯?

$(document).ready(

function() { 
    var x = x$("#{javascript:return getComponent(compositeData.fieldName).getClientId(facesContext);}").select2({}); 
    x.on('change', function(e) { 
     var y = "#{compositeData.refreshOnChangeID}"; 
     alert(y); 
     XSP.partialRefreshPost("#{id:fld4b}", { 
      immediate: true 
     }); 
     //XSP.partialRefreshPost('#{id:'+y+'}',{immediate: true}); 
    }) 
}); 

我能夠通過創建一個隱藏的計算字段解析到外地的ID來解決這個我想刷新:

<xp:text 
     escape="true" 
     id="refreshID" 
     value="${javascript:'#{id:'+compositeData.refreshOnChangeID+'}'}" 
     style="display:none"> 
    </xp:text> 

然後我就能夠抓住這個字段的值並在我的CSS中使用它:

$(document).ready(

function() { 
    var x = x$("#{javascript:return getComponent(compositeData.fieldName).getClientId(facesContext);}").select2({}); 
    x.on('change', function(e) { 
     var t = "#{id:refreshID}"; 
     var fldVal2 = document.getElementById(t).innerHTML; 
     XSP.partialRefreshPost(fldVal2, { 
      immediate: true 
     }); 
    }) 
}); 

回答

2

使用值客戶端ID + compositeData.fieldName創建Computed字段,然後在客戶端Java腳本函數中使用document.getElementById(「」)。innerHTML來獲取compositeData值。

+0

非常感謝! –

0

如果這是在一個輸出腳本控件中,EL不起作用。嘗試使用var y = '#{javascript:compsiteData.get("refreshOnChangeID")}';

+0

我試過了,但它仍然沒有工作。問題是我需要獲得完全計算的ID。我從來沒有能夠在CS內部進行計算。然而,Slack上的某個人給了我一個id來插入一個隱藏的字段,並根據組件的id計算出來,然後獲取該值:我將發佈上面的代碼。 –