как поймать событие в кодах после связывания событий в массиве строк внутри свойств "событий" переменной объекта формы в динамической форме 4D?

Легко поймать события из 4D-объектных методов 4D-бинарной формы (традиционная форма 4D), но не нашел никакой подсказки для этого в динамической форме json.

Я уже попробовал некоторые команды 4D (CALL FORM, CALL WORKER или POST OUTSIDE CALL), а также установить метод проекта для формы бок о бок в новом процессе внутри цикла, где я обрабатывал события внутри этого метода проекта. Но не мог обойти это. Также я не мог найти решение/пример для этого в блоге kb или 4D или в любом месте.

Таким образом, любой пример или шаблон базы данных будут более полезными.

+2
источник поделиться
1 ответ

Ravi,

Просто введите их в массив с именем "events".

Документы - ваш друг для таких вещей: 4D Manual/Dynamic Forms # Events

Свойство "events" принимает массив (набор) JSON строк или чисел. Чтобы вызвать событие, введите имя или значение события (см. Значения константы формы события). Например, "события": ["onLoad"]) или "события": [1]

Я не знаю, можно ли смешивать литералы и числовые ссылки. Я ожидал бы этого, но на самом деле не проверял это.

Изменение: Ravi, если по "catch events in code" вы имеете в виду, что форма, которую вы динамически создали, отвечает на них, тогда вам нужно будет указать имя метода проекта в теге method. Вы не можете просто написать некоторый код в объект при его динамическом построении, например, в обычном 4D, но вы можете вызвать метод проекта. В этом методе вы можете использовать оператор Case of для проверки функции Form event чтобы определить, какое событие было уволено и соответствующим образом отреагировать.

Вы не можете передавать параметры этому методу. Но вы можете использовать Object get name или Object get pointer команды, чтобы определить конкретный объект, который его вызвал.

Например, допустим, что я myMethod метод myMethod. Код для myMethod может выглядеть так:

 Case of
  :(Form event=On Clicked) // on Clicked is a 4D constant
    // do something
  :(Form event=on Data Change)
    // do something else
  End case

Или

 Case of
  :(Object get name(Object current)="myButton")
    Case of
      :(Form event=on Clicked)
         ...
    End case
  :(Object get name(Object current)="anotherName")
    Case of
      :(Form event=on Clicked)
         ...
    End case
 End case

Это иллюстрирует два подхода: 1) вы пишете отдельный метод для каждого объекта или 2) записываете один метод и определяете, какой объект его назвал. Я предпочитаю №2, но это строго мое мнение.

+2
источник

Посмотрите другие вопросы по метке или Задайте вопрос