0

私は、低帯域幅の領域からのアクセスを含む、大規模な世界規模のアプリケーションに取り組んでいます。そのため、すべての複雑な非表示/計算時に、最小限のSSJSまたは部分的な更新を使用したいと思います。これが私がこれまでに単純な「非表示/いつ」について持っているものです:

  1. パネルを表示する(「はい」)またはパネルを非表示にする(「いいえ」)ためのCSJS付きの「はい/いいえ」ラジオボタン。
  2. パネルの内部にはformTableがあり、#1のように、値が表示または非表示になります。
  3. XPageのonClientLoadで、次のコードが実行されます。

    // "getRadioValue" is a simple script to return the value of a radio button
    var v_value = getRadioValue("#{id:radioButton}");
    v_div = '#{javascript:getClientId("radioButtonPanel")}';
    // show or hide div simply use dojo to change the display of the panel
    if (v_value == 'Yes') {
         showDiv(v_div);
    } else {
         hideDiv(v_div);
    };
    

新しいドキュメントの場合、onClientLoadスクリプトは「radioButtonPanel」を正常に非表示にします。ラジオボタンを「はい」に変更すると、「いいえ」をクリックすると非表示になるのと同じように、radioButtonPanelが表示されます。それは素晴らしい働きをします!:-)

ただし、ドキュメントが保存されて読み取りモードで再度開かれると、onClientLoad CSJSイベントドキュメントに保存された値を読み取り、パネルを表示するかどうかを決定する必要があります。ドキュメントが編集モードで開かれると、onClientLoadが起動し、radioButton値を読み取り、パネルを正常に表示または非表示にします。

これは、読み取りモードで動作させるために、これまでに試したことです。

  1. CSJSでは、「#{javascript:currentDocument.getItemValueString('radioButton'}」を使用して値を取得し、
  2. 「rendered」または「visible」プロパティでいくつかの計算を実行しますが、これはSSJSであり、非表示の場合、「show/hideDiv」CSJSの可視性スタイルの変更を防ぎます。
  3. 昔ながらの「div」を追加してスタイルを計算しますが(これはXPagesの前に行っていたものです)、パススルーhtmlを実行できなくなったため、スタイルのCSJS計算を取得できないようです。 。理想的には、次のようなことができます。

    <div id="radioButtonPanel" style="<ComputedValue>">
    

    ComputedValueがドキュメントのバックエンド値を読み取り、何も追加しないか「display:none」を追加するかを決定する場所。

この長いフォームでは、他のすべての非表示/日時に多くのビュースコープが必要になるため、viewScopesを使用したくないことに注意してください。

これを100%CSJSにする方法はありますか?とても親密な気がしますが、このプロセス全体で欠けているものがあるのではないかと思います。

4

1 に答える 1

8

まず、スタイルを計算するのではなく、代わりにCSSクラスを計算することをお勧めします。ルールhiddenを適用するというクラスを定義するだけです。display:none;次に、可視性の切り替えは、 dojo.addClassまたはdojo.removeClassを呼び出すのと同じくらい簡単になります。

次に、この#{id:component}構文を使用してラジオボタンのクライアントIDを取得しているが、SSJSを使用してパネルのクライアントIDを取得していることがわかります。id:両方の構文を使用します。これはまだサーバー側の最適化ですが、これらの計算のインスタンスが多数ある場合は、合計されます。同様に、に置き換え#{javascript:currentDocument.getItemValueString('radioButton'}ます#{currentDocument.radioButton}。どちらも同じ値を返しますが、後者の方が高速です。

最後に、パススルータグの任意の属性(xp:またはなどの名前空間を持たないコンポーネントxc:)は引き続き計算できますが、エディターはこれらに有効な属性を認識していないため、式を手動で入力する必要があります。タグであるため、グラフィカルな式エディタは提供されません。したがって、最初の表示を評価する理想的な方法がコンテンツをdivでラップすることである場合、結果は次のようになります。

<div class="#{javascript:return (currentDocument.getValue('radioButton') == 'Yes' ? 'visible' : 'hidden');}">
<xp:panel>
...
</xp:panel>
</div>
于 2013-03-26T00:20:27.080 に答える