外部のjavascriptライブラリ(クライアント、サーバー、共有と同じレベルのパブリックフォルダに残したもの)からJavascriptを実行する必要があります。 SmartGWT VLayout内にそのJavaScript(ChemDoodle javascriptライブラリで生成されたCanvas)の出力が表示されている必要があります。最初は、HTMLFlowオブジェクトにjavascriptコードを追加し、HTMLFlowをVLayoutに追加しようとしましたが、HTMLFlowはJavascriptコードを実行しません(生成されたHTMLを別のブラウザウィンドウにコピー&ペーストすれば動作します)。私が現在取り組んでいるのはJSOHelper.eval( "java script code here")を使ってjavascriptコードを評価してJavaScriptObjectを得ることです。しかし、私はどのようにVLayoutの内部でjavascript実行の結果を "配置"するのか分かりません。私が言ったようにHTMLFlow>は、スクリプト\>ブロック(ブール設定setEvalScriptBlocks(真)のみHTMLFlowから呼び出された他のURLに適用される)を実行しないのでSmartGWTの結果HTMLの特定の場所にJavaScriptObject結果を追加するにはどうすればよいですか?
String javaScriptCode =
"var viewerCanvas = new ChemDoodle.ViewerCanvas('viewerCanvas', 200, 200);\n" +
"var molFile = 'contentToBeDrawnByChemDoodleCanvas';\n" +
"var moleculeToShow = ChemDoodle.readMOL(molFile);\n" +
"viewerCanvas.loadMolecule(moleculeToShow);\n";
HTMLFlow hflow = new HTMLFlow("<script>\n"+javaScriptCode+"</script>");
vLayout.addMember(hflow);
しかし、これは動作しません。だから、あなたが行うことができますJSOHelperクラスで:
JavaScriptObject jso = JSOHelper.eval(javaScriptCode); // without the <script> tags
// but the following line doesn't work, probably because jso is not a HTMLFlow
HTMLFlow flow2 = HTMLFlow.getOrCreateRef(jso);
// so then this doesn't work either, but I guess it shows where I want to get.
vLayout.addMember(flow2);
JavaScriptで(私はJSNI方法でそれを行う方法を理解しようとしてきたが、私はそこからvLayoutを参照する方法がわかりません)。私たちが$ docと$ winを持っていることを知っていますが、そこからvLayout(他のウィジェットの中にあるタブの中にあります)には、どうやって取得するのか分かりません。私はjavascriptにgetElementByIDメソッドがあることを知っていますが、vLayoutのIDを取得する方法と描画されたキャンバスにそのDIV(私が推測する)を関連付ける方法がわからないので、イメージがそこに表示されます。
javascriptスニペットが実行され、結果(生成されたキャンバス)が必要な場所に表示されるようにするには、どのように(私はJSNIを通して唯一の方法だと思いますか)
ありがとうございます!