Data binding 将inputText值绑定到具有计算名称的viewScope

Data binding 将inputText值绑定到具有计算名称的viewScope,data-binding,xpages,Data Binding,Xpages,我在自定义控件上有一个inputText组件,我试图将该值绑定到viewScope,但viewScope名称是使用复合数据值和字符串计算的 如果我对值绑定进行硬编码,它将起作用,例如: value=“${viewScope['BillingDate_From']}” viewScope名称是使用以下javascript代码计算的: compositeData.dateRangeFilter[0]。来自\u fieldname+'\u from' 我尝试了很多方法来实现这一点,但没有成功,有时它会

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

如果我对值绑定进行硬编码,它将起作用,例如: value=“${viewScope['BillingDate_From']}”

viewScope名称是使用以下javascript代码计算的: compositeData.dateRangeFilter[0]。来自\u fieldname+'\u from'

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

我最近尝试过的代码:
value=“${viewScope[#{javascript:compositeData.dateRangeFilter[0]。from_fieldname+'\u from'}]}”

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

您好,请尝试以下方法来构建您需要的内容:

控件:

           <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>
<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>

使用控件的XPage:

           <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>
<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”,您可以输入变量的名称而不是calculatedScopeVar。但这有一个限制,仅当calculatedScopeVar可通过组件onLoad访问时,它才起作用。例如,如果在重复控件中使用此控件,并尝试将重复数组用作calculatedScopeVar,则它将不起作用。

Michael,您确定吗?我使用视图作为数据源,在重复控件中使用这种类型的实现,从视图条目中获取字段传入值的值。感谢Aaron,我认为不是我没有考虑所有选项就是有限制。现在,我已经添加了viewScope名称作为必需的属性定义,虽然不是最好的,但确实有效