0

<xpScriptBlock>ExtJS グリッドをロードする 2 つのかなり長いクライアント側関数の内容を格納するために使用しています。クライアント側の JavaScript を使用して関数を呼び出すことができます。

下線を引いているドキュメントの条件に基づいて、別のグリッドを表示する必要があることがわかりました。バックエンドを参照するために、コードをサーバー側に移動し、view.postScript を使用してグリッドを呼び出そうとしました。これは機能せず、私の質問の基礎です。

このアプローチは可能ですか?すべてのコードをイベントに入れたくありません。関数は非常に長く、読みやすさと保守性のためにスクリプト ブロックに保持する方が適切です。Firebug コンソールを使用して手動でロードできるため、関数は確実にクライアントにロードされます。おそらく単純なものが欠けているので、アプローチを変更する前に質問したかったのです。

var typePO = document1.getItemValueString("typePO");
if(typePO == "AFS"){
    view.postScript("loadGridAFS();")
} else {
    view.postScript("loadGridOther();")
}

このコードは、パネルのサーバー側 onClientLoad イベントにあります。「return」キーワードを追加しようとしましたが、違いはありません。

更新: view.postscript() を使用して単純なアラートを機能させることさえできません。このメソッドは、SSJS の特定の種類のイベントでのみ機能しますか?

4

1 に答える 1

1

簡単なアラートを使用していくつか実験した後、view.postScript() はどこでも機能しないと言えます。

テストのために、同じコードを xpage の 6 つのイベントに入れました。以下は、私が使用したコードの例です: view.postScript("alert('onClientLoad');"); イベントに合わせてメッセージを変更しました。

結果は次のとおりです。

  1. onClientLoad = なし
  2. beforePageLoad = XSP エラー
  3. afterPageLoad = WORKS!
  4. afterRestoreView = なし
  5. beforeRenderResponse = WORKS!
  6. afterRenderResponse = なし

利用可能なすべてのイベントを試したわけではありませんが、ここでの結論は、view.postscript() がどこでも機能することを期待すべきではないということです。何もしない場合は、実行しようとしているクライアント JavaScript コードに質問する前に、イベントが view.postscript をサポートしていることを確認するために、最初に単純なアラートを試してください。

于 2013-08-23T20:19:49.157 に答える