我在自定义控件上有一个inputText组件,我试图将值绑定到viewScope,但是viewScope名称是使用compositeData值和字符串计算的。
如果我对值绑定进行硬编码,则可以使用,例如: 值= “$ {viewScope [ 'BillingDate_From']}”
使用以下javascript代码计算viewScope名称: compositeData.dateRangeFilter [0] .from_fieldname +'_From'
我尝试了很多方法来实现这一目标,但没有成功,有时会出现错误,通常是意外的字符错误,但大多数情况下inputText框都是空的。
我最近尝试过的代码: value =“$ {viewScope [#{javascript:compositeData.dateRangeFilter [0] .from_fieldname +'_From'}]}”
答案 0 :(得分:1)
我发现,我不知道这个的原因,如果评估中有任何字符串连接,尝试动态绑定不起作用。我解决这个问题的方法是创建一个自定义控件,接受bindingValue和dataSource作为参数,然后传入我想要使用的文档和字段名称。无论出于何种原因,如果代码使用复合数据,它仍然允许在页面加载时进行编辑。
答案 1 :(得分:1)
嗨试试这个来构建你需要的东西:
控制:
<xp:inputText id="inputText1">
<xp:this.value><![CDATA[${javascript:"#{"+compositeData.scopeName+"}";}]]></xp:this.value>
</xp:inputText>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[${javascript:"#{"+compositeData.scopeName+"}";}]]></xp:this.value>
</xp:text>
使用Control的XPage:
<xc:cc id="xx">
<xc:this.scopeName><![CDATA[#{javascript:return "viewScope." + " calculatedScopeVarName";}]]></xc:this.scopeName>
</xc:cc>
<xp:button value="Beschriftung" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="xx">
<xp:this.action><![CDATA[#{javascript://}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
您无法添加会话或其他范围而不是computeScopeVar,而不是“viewScope”,您可以输入var的名称。但这有一个限制,只有在通过组件onLoad可以访问calculatedScopeVar时它才有效。例如,如果在Repeat控件中使用此控件并尝试将重复的数组用作calculatedScopeVar,则它将无法工作。