1

我在自定义控件上有一个 inputText 组件,我试图将值绑定到 viewScope,但 viewScope 名称是使用复合数据值和字符串计算的。

如果我对它的值绑定进行硬编码,例如: value="${viewScope['BillingDate_From']}"

viewScope 名称使用以下 javascript 代码计算:compositeData.dateRangeFilter[0].from_fieldname + '_From'

我尝试了很多方法来实现这一点,但没有成功,有时会出错,通常是意外的字符错误,但大多数时候 inputText 框是空的。

我最近尝试过的代码: value="${viewScope[#{javascript:compositeData.dateRangeFilter[0].from_fieldname + '_From'}]}"

4

2 回答 2

1

我发现,但我不知道原因,如果评估中存在任何字符串连接,尝试动态绑定将不起作用。我解决这个问题的方法是创建一个接受 bindingValue 和 dataSource 作为参数的自定义控件,然后传入我想要使用的文档和字段名称。无论出于何种原因,如果代码使用复合数据,它仍然允许在页面加载时进行编辑。

于 2013-07-25T14:21:53.697 回答
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>

使用控件的 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>

而不是“viewScope”,您不能添加会话或其他范围,而不是计算的ScopeVar,您可以输入您的 var 的名称。但这有一个限制,只有当计算的ScopeVar 可以通过组件 onLoad 访问时才有效。例如,如果您在重复控件中使用此控件并尝试将重复数组用作计算范围变量,它将不起作用。

于 2013-07-25T14:25:52.563 回答