如何在CSJS中获得重复控制的索引

时间:2015-06-12 06:59:11

标签: xpages repeat indexof

我在网上搜索过,发现了这个 Xpages get index of repeat in CSJS但是......它对我不起作用

这是我的代码(部分)

<xp:repeat id="repeat1" rows="30" var="currentDetail" indexVar="detailIndex" value="#{LeaveBean.details}">
    <xp:inputText id="leavefrom" value="#{currentDetail.subfromtime}">
           <xp:eventHandler event="onblur" submit="false" refreshMode="partial" refreshId="repeat1">
                     <xp:this.script><![CDATA[........]]></xp:this.script>
          </xp:eventHandler>
    </xp:inputText></xp:repeat>

我想要做的是,一旦用户点击输入字段,然后我就可以得到他编辑的那一行,我使用的ssjs就像LeaveBean.dosomething( detailIndex )一样,但是如何获得在csjs的索引?

Marky Roden(对我来说很神奇XD)建议使用attr来获取它......但是......我是xpages的新手,所以不知道如何在我自己的代码中添加它,我的意思是,我试图添加诸如

<xp:this.attrs>
     <xp:attr name="seanIndex"
      value="???">
     </xp:attr>
</xp:this.attrs>

但价值不能像#{detailIndex},否则页面会崩溃......所以我现在能做什么......

2 个答案:

答案 0 :(得分:4)

将隐藏文本字段添加到重复控件中,索引值为

    <xp:text
        escape="true"
        id="detailIndexText"
        value="#{detailIndex}"
        style="display:none">
    </xp:text>

然后您可以使用

获取客户端的索引
    var index = document.getElementById("#{id:detailIndexText}").innerHTML

更新

不需要隐藏字段的较短版本只是:

    var index = #{javascript:detailIndex};

答案 1 :(得分:0)

你可以得到索引号。以这种方式直接在重复控件内的cjs中:

<xp:repeat id="repeat1" rows="30" var="currentDetail" indexVar="detailIndex" value="#{LeaveBean.details}">
    <xp:inputText id="leavefrom" value="#{currentDetail.subfromtime}">
           <xp:eventHandler event="onblur" submit="false" refreshMode="partial" refreshId="repeat1">
                     <xp:this.script><![CDATA[
var index = "#{javascript: return detailIndex;}";
// do whatever with index...

]]></xp:this.script>
          </xp:eventHandler>
    </xp:inputText></xp:repeat>

表达式&#34;#{javascript:return detailIndex}&#34;在服务器端进行评估,渲染的cjs为no。迭代。

通过这种方式,您可以避免在dom树中呈现隐藏的输入和搜索以获取no。