我已经能够使用此处描述的技术成功创建动态字段名称并保存输入字段的值:http://lpar.ath0.com/2014/04/07/repeated-xpages-input-controls-with-number-indexed-field-names/
我还有一个计算字段,它有一个索引编号的名称,但其值是根据关键字选择计算的。我可以为它分配动态字段名称:
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{compositeData.dataSource[compositeData.fieldName2]}]]></xp:this.value>
</xp:text>
此字段的属性定义如下所示:
并且对复合控件的调用如下所示:
<xc:cc_dynamicAssetItems
row="#{(rownum lt 10)? '0':''}#{rownum}"
dataSource="#{document1}"
fieldName1="replace#{(rownum lt 10)? '0':''}#{rownum}"
fieldName2="budget#{(rownum lt 10)? '0':''}#{rownum}" >
</xc:cc_dynamicAssetItems>
但我不知道如何将值传递给此计算字段。它的SSJS应该是:
var projectNumber = getComponent("ProjectNumber").getValue();
if(projectNumber == ""){
return "Nothing found";
}else{
return projectNumber + "A";
}
我很欣赏一些方向。
谢谢,
丹
答案 0 :(得分:1)
您应该设置基础数据源的值,而不是设置组件的值。这意味着您的逻辑不应该在计算字段中运行,而不是在 ProjectNumber 组件的onChange事件中运行。 然后你必须更新,例如仅 document1.budget01 ,速度要快得多。
作为替代方案,您仍然可以将方法绑定*传递给自定义控件,如下所述:Pass javascript code to Custom Control
(*:在您的情况下是一个值绑定)
答案 1 :(得分:-1)
你是否尝试使用javascript代替表达式语言
例如: fieldName1 =“#{javascript:'replace'+(rownum&gt; 10?'0':'')+ rownum}”