如何将JavaScriptObject结果添加到SmartGWT中生成的HTML的特定位置
How to add a JavaScriptObject result to a particular place of the resulting HTML in SmartGWT?
我需要从外部Javascript库执行Javascript(我在公共文件夹中留下了与客户端,服务器和共享相同的级别)。我需要该JavaScript的输出(这是由ChemDoodle JavaScript库生成的画布)显示在SmartGWT VLayout中。起初,我尝试将javascript代码添加到HTMLFlow对象,然后将HTMLFlow添加到VLayout,但是HTMLFlow不会执行javascript代码(如果我复制粘贴生成的HTML到另一个浏览器窗口,它可以工作)。我目前正在尝试的是用JSOHelper评估javascript代码。eval("这里的java脚本代码")产生一个JavaScriptObject。然而,我不知道如何"放置"javascript执行的结果在VLayout。
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);
然而,正如我所说的,这不起作用,因为HTMLFlow不会执行>script'>块(布尔设置setEvalScriptBlocks(true)仅适用于从HTMLFlow调用的其他url)。使用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);
我一直在试图找出如何用JSNI方法做到这一点,但我不知道如何从那里引用vLayout(在javascript中)。知道我们有$doc和$win,但从那里到vLayout(这是在一个选项卡内,这是在其他小部件内),我不知道如何得到。我知道在javascript中有一个getElementByID方法,但我不知道如何获得vLayout的id,然后如何将该DIV(我猜)与绘制的画布关联,以便图像出现在那里。
有没有人能解释我如何管理(我猜通过JSNI是唯一的方法),使javascript代码片段被执行,结果(生成的画布)显示在我需要的地方?
谢谢!
您最好采用不同的方法,使用JSNI只处理JavaScript实现,并将所有更高级的操作委托给Java层。
了解JSNI是至关重要的,所以我建议您从阅读一些文档开始(GWT关于JSNI的编码基础非常有用)。
话虽如此,最好的方法是将库实例化的本机(JavaScript)脚本作为单独的文件,并通过模块(或应用程序)的.gwt.xml
文件注入预加载。
那么你可以将该文件中的代码片段包装在一个自执行块中(即(function() {...})();
),以确保它会在onModuleLoad()
之前运行,但这只是调试糖。
- 加载页面时更改html页面的位置
- HTML文档中脚本标记的位置-<头部>&<身体>有不同的行为
- 将Rails后端添加到JS/HTML/CSS应用程序时,正确的文件位置是什么
- JavaScript OnChange Listener在HTML标记中的位置
- 获取 HTML 5 音频控制文件位置并在不使用 id 选择器的情况下更新 src
- 一个html/javascript'小工具'知道用户何时单击了小部件外的任意位置
- 内容可编辑分区-根据内部HTML位置的光标位置
- 如何在提交html表单后保持相同的位置
- 如何使用位置获取滚动功能获取 HTML 中的元素标签
- 如何在 html Web 应用中检测滑动原点位置
- 如何使某个框等于图像HTML的位置
- HTML 按钮以在页面上的其他位置提交表单
- 为什么我在 webpack 中需要 html 文件时会得到一个位置字符串
- 如何在 Google App Engine 上存储 HTML 5 地理位置数据
- 如何获取相对于 HTML 页面的标记位置
- HTML重定向到错误的位置
- 使用 jQuery 更改 html 位置
- Firefox 中的 HTML 位置问题(适用于 IE 和 Chrome)
- 使用jQuery将PHP函数的结果输出到特定的HTML位置
- 如何在运行Build时更改gulpfile.babel.js以添加HTML位置