1

カスタム コントロールに inputText コンポーネントがあり、値を viewScope にバインドしようとしていますが、viewScope 名は、compositeData 値と文字列を使用して計算されます。

値バインディングをハードコードすると、次のように機能します。

viewScope 名は、次の JavaScript コードを使用して計算されます: compositeData.dateRangeFilter[0].from_fieldname + '_From'

私はこれを達成するために多くの方法を試しましたが、成功しませんでした。エラーが発生することもあり、通常は予期しない文字エラーが発生しますが、ほとんどの場合、inputText ボックスは空です。

最近試したコード: value="${viewScope[#{javascript:compositeData.dateRangeFilter[0].from_fieldname + '_From'}]}"

4

2 に答える 2

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」の代わりにセッションや別のスコープを追加することはできず、calculatedScopeVar の代わりに変数の名前を入力できます。ただし、これには制限があり、コンポーネント onLoad を介して CalculateScopeVar にアクセスできる場合にのみ機能します。たとえば、このコントロールを繰り返しコントロールで使用し、繰り返し配列をcalculatedScopeVarとして使用しようとすると、機能しません。

于 2013-07-25T14:25:52.563 に答える
1

評価に文字列連結がある場合、動的にバインドしようとしても機能しないことがわかりましたが、その理由はわかりません。これを回避する方法は、bindingValue と dataSource をパラメーターとして受け入れるカスタム コントロールを作成し、使用するドキュメントとフィールド名を渡すことでした。何らかの理由で、コードが複合データを使用している場合でも、ページの読み込み時に編集できます。

于 2013-07-25T14:21:53.697 に答える