动态数据绑定?

时间:2012-03-28 18:12:29

标签: xpages

我的Notes文档中有几个字段

FieldA_1 FieldA_2 FieldA_3 FieldA_4

FieldB_1 FieldB_2 FieldB_3 FieldB_4

在复合控件上,我有2个编辑框 FIELDA FieldB

我有一个compositeData.ATM_NUM定义了一个自定义控件,它是一个值为1,2,3,4的下拉列表。

如何使用可用的复合数据将控件上的编辑框绑定到相应的文档字段?

例如,我想做类似的事情: “FieldA _”+ compositeData.ATM_NUM。

我在这个帖子中尝试了javascript解决方案:

Binding an edit box within a custom control to a form field programatically

但它似乎没有用。

3 个答案:

答案 0 :(得分:11)

请尝试以下值作为例如字段A:

<xp:inputText value="#{document['FieldA'+compositeData.ATM_NUM]}" />

您还可以扩展自定义控件的属性以包含整个字段名称(从而将“FieldA_1”传输到自定义控件)。然后你应该能够做到以下几点:

<xp:inputText value="#{document[compositeData.fieldName]}" />

答案 1 :(得分:5)

问题与compositeData准备好供您使用的时间有关。在开始时,当您的自定义控件准备就绪时,它会评估为“0”。

试试这个:

<xp:inputText id="inputText1" 
           value="${javascript:'#{document1.SomeField'+compositeData.SomeParam+'}'}">
</xp:inputText>

在那里使用“$”符号很重要。它将根据SomeParam创建对SomeField1,SomeField2等的绑定。

答案 2 :(得分:5)

自定义控件的数据绑定示例如下:

创建自定义控件,添加2个自定义属性:BindTo(String),canEdit(布尔值)。通常,您需要根据业务逻辑的状态而不是其余部分处于编辑模式的事件来读取字段。

 <xp:listBox id="listBox1"
        rendered="#{compositeData.canEdit}">
        <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value>
        <xp:selectItem itemLabel="red"></xp:selectItem>
        <xp:selectItem itemLabel="blue"></xp:selectItem>
        <xp:selectItem itemLabel="green"></xp:selectItem>
 </xp:listBox>
 <xp:text id="textForListbox"
        rendered="#{!compositeData.canEdit}">
        <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value>
 </xp:text>

这种方法(使用${javascript:"#{"+compositeData.BindTo+"}"})的优点是你可以将该控件绑定到任何东西:文档,范围变量,bean等。