Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Rhino и динамическая загрузка JavaScript


Автор: Fame_biz 10.9.2009, 11:56
Добрый день всем.


Есть вопрос следующего рода :

Существует 10 файлов {name}.js в которых написаны кокетство функции и они лежат все в одной директории

Нужно из под Java c помощью  Rhino их загрузить для дальнейшего использования. Толь вот здесь возникла проблема следующего рода:

для примера есть файлы:

name1.js
Код

    function A () {
          B();
          C();
    }


name2.js
Код

    function B () {
           C();
    }


name3.js
Код

    function C () {
          alert("test");
    }


из этого следует что файлы нужно загружать в порядке :
name3.js
name2.js
name1.js


Вопрос как можно сделать так в проекте Rhino чтобы указав один файл оно знало какие файлы или функции нужны для загрузки.

Если загрузить name1.js и вызвать A (); то получим 

JavaScript runtime exception: ReferenceError: "B();" is not defined.


 

Автор: LSD 10.9.2009, 12:31
Цитата(Fame_biz @  10.9.2009,  11:56 Найти цитируемый пост)
Вопрос как можно сделать так в проекте Rhino чтобы указав один файл оно знало какие файлы или функции нужны для загрузки.

Сам подумай, как в принципе такое можно реализовать? Откуда Rhino должен знать: что это за функция такая B() - то ли это просто опечатка, то ли забыли загрузить нужный исходник, то ли еще что.

Просто предварительно загружай все файлы и все:
Код

public class Test
{
  public static final String A_JS = "    function A () {\n" +
                                    "          B();\n" +
                                    "          C();\n" +
                                    "    }";
  public static final String B_JS = "    function B () {\n" +
                                    "           C();\n" +
                                    "    }";
  public static final String C_JS = "    function C () {\n" +
                                    "          java.lang.System.out.println(\"test\");\n" +
                                    "    }";
  
  public static void main(String[] args) throws Exception
  {
    ScriptEngine rhino = new ScriptEngineManager().getEngineByName("JavaScript");
    rhino.eval(A_JS);
    rhino.eval(B_JS);
    rhino.eval(C_JS);
    rhino.eval("A()");
  }
}

Автор: Fame_biz 10.9.2009, 17:28
нашол другой способ

Код

load("name3.js");
load("name2.js");
function A () {
          B();
          C();
    }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)