从 4D 对象的 4D 二进制形式(传统 4D 形式)的方法中很容易捕获事件,但在 json 动态形式中没有找到任何线索。
我已经尝试了一些 4D 命令(CALL FORM、CALL WORKER 或 POST OUTSIDE CALL),并在我处理该项目方法内部事件的循环内的新进程中并排安装表单的项目方法。但无法绕过它。此外,我在 kb 或 4D 博客或任何地方都找不到任何解决方案/示例。
因此,任何示例或数据库模板都会更有帮助。
从 4D 对象的 4D 二进制形式(传统 4D 形式)的方法中很容易捕获事件,但在 json 动态形式中没有找到任何线索。
我已经尝试了一些 4D 命令(CALL FORM、CALL WORKER 或 POST OUTSIDE CALL),并在我处理该项目方法内部事件的循环内的新进程中并排安装表单的项目方法。但无法绕过它。此外,我在 kb 或 4D 博客或任何地方都找不到任何解决方案/示例。
因此,任何示例或数据库模板都会更有帮助。
拉维,
只需将它们串入一个名为“events”的数组中。
对于这样的事情,文档是您的朋友:4D 手动/动态表单#Events
“events”属性接受字符串或数字的 JSON 数组(集合)。要调用事件,请输入事件的名称或值(请参阅表单事件常量值)。例如,“事件”:[“onLoad”])或“事件”:[1]
我不知道您是否可以混合使用文字和数字引用。我希望如此,但还没有实际测试过。
编辑:Ravi,如果“在代码中捕获事件”是指让您动态创建的表单响应它们,那么您需要在“方法”标签中包含项目方法的名称。您不能像在常规 4D 中那样在动态构建对象时将一些代码写入对象,但您可以调用项目方法。在该方法中,您可以使用Case of
语句来测试Form event
函数以确定触发的事件并做出适当的响应。
您不能将参数传递给此方法。但是您可以使用Object get name
orObject get pointer
命令来确定调用它的特定对象。
例如,假设我包含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,但这完全是我的意见。