Автор Тема: Вопрос по биндингу ? Или что тут еще требуется?  (Прочитано 107422 раз)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Уже мозг сломал, помогите, пожалуйста, разобраться.
Есть код (первый это класс на javascript, который хочу использовать, второй, пример как использовать). Не могу понять, как замутить это на обероне (для компилятора онлайн с сайта). В итоге хотелось бы просто функции добавлять, чтобы они динамически подтягивались к объекту. Не пойму, когда надо использовать MODULE, когда TYPE, чтобы добиться нужного эффекта.

В итоге хотелось бы получить нужный объект-наследник, с нужными процедурами (обработчиками событий)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #1 : Октябрь 22, 2013, 10:51:04 am »
Подозреваю, что тут надо будет использовать что-то навроде

for (var key in DredHandlerForm) {
  if ( !rabbit.hasOwnProperty(key) ) continue; // пропустить "не свои" свойства
 alert (key + " = " + DredHandlerForm[key]); // здесь надо бы динамически прикрутить свойство

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #2 : Октябрь 22, 2013, 10:52:50 am »
Уже мозг сломал, помогите, пожалуйста, разобраться.
Есть код (первый это класс на javascript, который хочу использовать, второй, пример как использовать). Не могу понять, как замутить это на обероне (для компилятора онлайн с сайта). В итоге хотелось бы просто функции добавлять, чтобы они динамически подтягивались к объекту. Не пойму, когда надо использовать MODULE, когда TYPE, чтобы добиться нужного эффекта.

В итоге хотелось бы получить нужный объект-наследник, с нужными процедурами (обработчиками событий)
Похоже у форума несварение от кириллицы - можно приаттачить файл с названием на латинице?
Y = λf.(λx.f (x x)) (λx.f (x x))

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #3 : Октябрь 22, 2013, 11:20:55 am »
Вот

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #4 : Октябрь 22, 2013, 12:16:20 pm »
Подозреваю, что тут надо будет использовать что-то навроде

for (var key in DredHandlerForm) {
  if ( !rabbit.hasOwnProperty(key) ) continue; // пропустить "не свои" свойства
 alert (key + " = " + DredHandlerForm[key]); // здесь надо бы динамически прикрутить свойство
Хотя, пожалуй, в случае с обероном, свойство не должно прикручиваться динамически подобным образом, т.к. теряется типизация. Или можно?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #5 : Октябрь 22, 2013, 12:26:39 pm »
А в обероне можно перебрать все поля у записи в коде? (чтобы получить их наименование, а также присвоить по имени). Или наименования процедур в каком в модуле?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #6 : Октябрь 22, 2013, 12:51:55 pm »
А в обероне можно перебрать все поля у записи в коде? (чтобы получить их наименование, а также присвоить по имени). Или наименования процедур в каком в модуле?
В Обероне (языке) нет reflection'a.

А зачем оно тут?
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #7 : Октябрь 22, 2013, 01:36:56 pm »
Похоже у форума несварение от кириллицы - можно приаттачить файл с названием на латинице?

В опере 12.15 всё норм скачивается (win7)
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #8 : Октябрь 22, 2013, 01:40:34 pm »
Похоже у форума несварение от кириллицы - можно приаттачить файл с названием на латинице?

В опере 12.15 всё норм скачивается (win7)
Ну, значит у браузера моего несварение. В любом случае какой-то мелкий косячок в движке форума.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #9 : Октябрь 22, 2013, 02:01:16 pm »
Уже мозг сломал, помогите, пожалуйста, разобраться.
Есть код (первый это класс на javascript, который хочу использовать, второй, пример как использовать). Не могу понять, как замутить это на обероне (для компилятора онлайн с сайта). В итоге хотелось бы просто функции добавлять, чтобы они динамически подтягивались к объекту. Не пойму, когда надо использовать MODULE, когда TYPE, чтобы добиться нужного эффекта.

В итоге хотелось бы получить нужный объект-наследник, с нужными процедурами (обработчиками событий)

Вам нужно учитывать, что в обероне и в яваскрипте сильно разные модели ООП -- в обероне вариант, приближающийся к привычной для c#/java/delphi модели наследования, в яваскрипте же ООП -- это дополнение существующих объектов-прототипов новыми элементами. Так просто 1-в-1 скопировать не получится...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #10 : Октябрь 22, 2013, 04:23:38 pm »
Уже мозг сломал, помогите, пожалуйста, разобраться.

Поскольку у тебя тут предполагается наследование от некой базовой реализации, то на обероне это могло бы выглядеть так:
MODULE test;
IMPORT JS;
TYPE
    MyTestScriptForm = RECORD(JS.ScriptForm)
        disableAutoEvents: BOOLEAN;
        КоманднаяПанель1_Кнопка4: PROCEDURE();
...

Сейчас это не работает. И с таким подходом есть проблемы:
1. В жабаскрипте нет наследования и каждый фреймворк эмулирует классическое ООП наследование по-своему. Например, в твоем это "stdlib.Class.extend" - чего оно там делает и как работает зависит от прихоти разработчика конкретного фреймворка. Т.е., я не могу в компиляторе поддержать сразу все возможные реализации наследования.
2. В обероне (не допиленном) нет методов (связанных процедур), поэтому попытки их эмулировать через процедурные поля будут выглядеть крайне громоздко.

Поэтому я могу предложить зайти с обратной стороны:
1. Реализовать нужную функциональность на обероне, скомпилировать модуль в .js.
2. Потребить этот модуль из самописного .js, который отнаследуется от нужного js-класса и будет дергать нужные методы из скомпилированного в .js оберона.

Понятна идея?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #11 : Октябрь 22, 2013, 10:55:58 pm »
А нельзя JS класс импортировать как обероновый модуль?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #12 : Октябрь 23, 2013, 02:43:17 am »
А нельзя JS класс импортировать как обероновый модуль?

В жабаскрипте нет классов (еще раз :) Там есть "объекты" с полями, функции, массивы и строки (все это в утиной диамике). Все. Объекты могут быть связаны между собой "наследованием" столь специфичным, что оно не может быть отражено ни в один нормальный ОО язык :) Из этого говна можно пытаться делать (и делают) что-то более классическое (классы), но потребить это невозможно, потому что нет какого-то стандарта на то, как должен выглядеть "класс в жабаскрипте".

Поэтому, как я уже говорил, намного проще потребить из жабаскрипта обероновский модуль, скомпилированный со всеми проверками типов в .js, чем наоборот.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #13 : Октябрь 23, 2013, 03:06:09 am »
Вообще да, надо допилить хотя бы до возможности хранения ссылки на объект из жабаскрипта. Как-то так:
MOULE Test;
IMPORT JS;
VAR jsObject: JS.var;
BEGIN
    jsObject := JS.makeObject();
    jsObject.method();
END test.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #14 : Октябрь 23, 2013, 04:42:38 am »
Вообще да, надо допилить хотя бы до возможности хранения ссылки на объект из жабаскрипта. Как-то так:
MOULE Test;
...
Это планируется делать? Если да, то каковы примерные сроки?

Или может лучше сразу советом воспользоваться ?

Цитировать
Поэтому я могу предложить зайти с обратной стороны:
1. Реализовать нужную функциональность на обероне, скомпилировать модуль в .js.
2. Потребить этот модуль из самописного .js, который отнаследуется от нужного js-класса и будет дергать нужные методы из скомпилированного в .js оберона.