2013-07-11 5 views
2

У нас есть проект, основанный на сети, но он должен иметь значительный доступ к файловой системе пользователя. HTML еще не позволяет нам получить достаточный доступ, и поскольку мы в основном являемся магазином Grails, наличие кода доступа к файлу в виде апплета имеет гораздо больший смысл, чем наличие кода Flash.Как можно вызвать функции в апплете Griffon из JavaScript?

Мы немного потрудились с Griffon (предыдущий прототип для этого проекта был 100% -ным проектом Griffon Webstart), и любить структуру и «удаление шаблонов», которые Griffon дает апплетам. Однако проблема, с которой мы сталкиваемся, заключается в подключении интерфейса Html/JavaScript к апплету Griffon, который фактически выполняет всю работу.

Мы нашли Джеймса Уильямса 'excellent example вызова функций JavaScript из приложения Griffon, но не смогли найти пример обратного: вызов функций Griffon со стороны JavaScript.

Основная проблема заключается в том, что мы хотим, чтобы приложение Griffon было «без головы» (или как можно ближе к нему), поскольку весь пользовательский интерфейс будет обрабатываться JavaScript и HTML. Это означает, что мы не можем использовать события пользовательского интерфейса, вызванные в приложении Griffon, как это делает Джеймс в своем примере.

Есть ли у кого-нибудь пример взаимодействия JavaScript с апплетом Гриффона, из которого мы могли бы научиться? Или любой совет о том, как нарисовать вещи из апплета Гриффона на JavaScript?

ответ

2

Звучит для меня, что вы хотите назвать функцию Java (или groovy!), Найденную в Applet из внешнего мира, используя JavaScript, верно?

Для того, чтобы это работало:

  1. Вы должны быть LiveScript включен и банку апплета должен быть подписан.

  2. Следующий шаг - Определить точку входа в подклассе апплета, который знает, как обращаться с вызовом, который вы хотите сделать.

    Здесь сложно, потому что класс апплета по умолчанию - griffon.swing.SwingApplet, поэтому вы должны создать свой собственный подкласс griffon.swing.SwingApplet и использовать его в качестве основной точки входа.

    Ваш подкласс будет определять метод (или методы), вызываемый со стороны JavaScript.Это должно быть что-то вдоль линий:

    import griffon.swing.SwingApplet; 
    
    public class MySwingApplet extends SwingApplet { 
        // match superclass constructors 
        public CalculatorApplet(String[] args) { 
         super(args); 
        } 
    
        public Object myAppletMethod(String[] args) { 
         // args come form the JS world 
         // do whatever is necessary here 
        } 
    } 
    
  3. Чтобы сказать Грифон использовать наш пользовательский апплет подкласс вместо стандартного, просто создайте файл с именем griffon-app/scripts/_Events.groovy и поместите следующий внутри:

    eventPackageAppStart = {   
        griffonAppletClass = 'calculator.CalculatorApplet'   
    } 
    
  4. Наконец, схватить объекта апплета из JavaScript и вызывать myAppletMethod() с любыми значениями, которые вы видите нужным:

    <script> 
        function talkToApplet() { 
         var r = document.applets.myAppletId.myAppletMethod("arg1", "arg2"); 
         alert(r); 
        } 
    </script> 
    

А more detailed example можно найти на my blog.

+1

Я добавил более подробное описание о том, как запустить эту работу, вы можете найти ее здесь http://www.jroller.com/aalmiray/entry/griffon_calling_application_methods_from – aalmiray

+0

Будет ли пример работать с представлением, что ничего не имеет, так что по существу 1px x 1px кадр? Или есть лучший способ заставить его не отображаться на странице вообще и по существу работать как гораздо более мощная библиотека JS? И откроется ли диалог «Файл» нормально? – cdeszaq

+0

Несомненно, он должен работать даже с рамкой 1x1 px. Если апплет не виден, он не будет загружен, поэтому вы должны сделать его 1x1 px большим, по крайней мере, – aalmiray

 Смежные вопросы

  • Нет связанных вопросов^_^