0

次のコードで dojo.addOnLoad に渡される関数を含む、Dojo コードを含む Web ページがあります。

laborDetailHandler.RevenueTotalInput = dojo.byId('#{id:LaborRevenueTotal}');
if (!laborDetailHandler.RevenueTotalInput) {
 console.warn('RevenueTotalInput not found.')
}

このコードがインラインの場合、LaborRevenueTotal 入力ボックスの上にある場合でも機能します。

このコードをスクリプト ライブラリに移動すると、「RevenueTotalInput が見つかりません」というメッセージが表示されます。このメッセージは、dojo.addOnLoad が関数を受け取って実行したが、何らかの理由で関数が機能していないことを示しています。

私はここで完全に困惑しています。誰にもアイデアはありますか?

4

4 に答える 4

2

'#{...}'式は、SSJSライブラリ内では機能せず、XPageまたはカスタムコントロールのソースでのみ機能します。

回避策:他の場所(テキストフィールドなど)で#{}句を使用し、クライアント側のスクリプトで参照します。

于 2011-03-05T10:23:23.033 に答える
1

XPageのプロパティまたはイベントにコードを配置すると、コードは文字列としてエバリュエーターを介して渡されます。パッケージエクスプローラービューでXPages用に作成されたJavaクラスを見ると、私が何を意味しているのかがわかります。コードは文字列であり、ページの読み込み時または実行時に評価するJava関数に渡されます。

スクリプトライブラリのコードがエバリュエーターを通過するとは思わないため、#{id:myField}は計算されません。レンダリングされたHTMLページのどのmyFieldが意味するのかを識別するためのコンテキストの問題もあります。

それを回避する方法は2つあります。1つは、XPageイベントからSSJS/CSJS関数にIDを渡すことです。CSJSのもう1つのオプションは、dojo.queryを使用することです。

于 2012-02-01T11:15:48.890 に答える
0

スクリプト ライブラリは XPages でコンパイルされませんが。また、インラインで実行されません。

XPages でのベスト プラクティスは、スクリプト ライブラリでブラックボックス アプローチを使用することです。スクリプト ライブラリで定義されているすべての関数にパラメーター化を使用します (サーバー側とクライアント側の両方で有効)。

SSJS では、別の方法として、getComponent によってコンポーネント オブジェクトを取得し、それらのクライアント ID を学習することもできますが、これではスクリプト ライブラリの再利用性が低下します。XSP コードをきれいに保つためだけにそれらを使用しても問題ありません。ただし、SSJS のデバッグが面倒なので、必ずエラー トラップ (try/catch) を使用してください。

于 2012-01-28T11:38:54.937 に答える
0

謝罪します! これは道場の質問だと思いました。代わりに、それは Lotus Notes XPages の質問でした! なぜこれが起こっているのかはまだわかりませんが、誰かがその問題が私のスクリプトよりも大きいこととそれを解決する方法を裏付けています。

私の回避策は、スクリプト ライブラリ内でこれらの要素を見つけるのではなく、必要な要素へのハンドルを取得し、スクリプト ライブラリ内の初期化関数に渡すことです。

ペラーさん、ご回答ありがとうございます。私の質問が悪くてすみません。

于 2010-01-11T18:20:23.917 に答える