【问题标题】:Get the ID of a custom Control获取自定义控件的 ID
【发布时间】:2013-10-16 21:05:43
【问题描述】:

我有一个相当复杂的自定义控件,可以在任何给定的 XPage 上多次使用。在控件中,我创建了几个 viewScope 变量,这些变量对于特定的自定义控件必须是唯一的。我想做类似 viewScope.put(customControlID + "variableName","Stuff) 但是我不知道如何获取自定义控件ID

【问题讨论】:

    标签: custom-controls xpages


    【解决方案1】:

    您可以在<xp:view> 级别使用this.getId() 获取当前的自定义控件ID。

    如果您将此 ID 放入复合数据变量(例如 compositeData.id),那么您可以在自定义控件内的任何地方使用该 ID。

    <xp:view xmlns:xp="http://www.ibm.com/xsp/core"
        beforePageLoad="#{javascript:compositeData.id = this.getId()}" >
    

    在 SSJS 中的用法:

    viewScope.put(compositeData.id + "variableName","Stuff")
    

    通常,ID 命名为“_id2”、“_id8”、...

    【讨论】:

    • 这是一个相当聪明的方法,克努特。
    【解决方案2】:

    您可以使用 dataContext 变量:

    <xp:this.dataContexts>
       <xp:dataContext
          value="#{javascript:this.getId()}"
          var="id">
       </xp:dataContext>
    </xp:this.dataContexts>
    

    然后变量可以在 SSJS 中作为 id 访问...

    <xp:label id="label1" value="#{javascript:id}" />
    

    ...或在 EL 中:

    <xp:label id="label1" value="#{id}" />
    

    【讨论】:

    • 这也是一个非常方便的解决方案。
    【解决方案3】:

    这是另一种作为 SSJS 函数的解决方案:

    function getCCId( cmp:javax.faces.component.UIComponent):string{
    
        try{
            if( typeof( cmp ) === 'com.ibm.xsp.component.UIIncludeComposite' ){
                return cmp.getId();
            }
            return getCCId( cmp.getParent() )
        }catch(e){}
    
    }
    

    函数爬上组件树,直到找到父CC,然后返回id。

    你可以使用它 f.e.在这样的标签中:

    <xp:label id="label1">
        <xp:this.value><![CDATA[#{javascript:getCCId( this )}]]></xp:this.value>
    </xp:label>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      相关资源
      最近更新 更多