Мне нужно выполнить Javascript из внешней библиотеки javascript (которую я оставил в общей папке на том же уровне, что и клиент, сервер и общий доступ).Мне нужно, чтобы вывод этого JavaScript (который является Canvas, сгенерированным библиотекой JavaScript ChemDoodle) отображался в SmartGWT VLayout.Сначала я попытался добавить код javascript в объект HTMLFlow, а затем добавить HTMLFlow в VLayout, однако HTMLFlow не выполнит код Javascript (если я скопирую и вставлю полученный HTML в другое окно браузера, это будет работать).В настоящее время я пытаюсь оценить код javascript с помощью JSOHelper.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 не выполнит скрипт>\> block (логическое значение setEvalScriptBlocks (true) применяется только для других URL-адресов, вызываемых из HTMLFlow).Итак, с классом 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 и как связать этот DIV (я полагаю) с нарисованным холстом, чтобы изображение там появлялось.
Может ли кто-нибудь объяснить мне, как мне удается (я думаю, что через JSNI это единственный способ) сделать так, чтобы этот фрагмент javascript выполнялся и результат (сгенерированный холст) отображался там, где мне нужно?
Спасибо!