事件处理
事件绑定规则
前面介绍了模板的文件包含index.databinding,负责来描述模板中的数据、事件、动画的绑定关系。 我们可以在databinding文件中的event数据模块,对模板中的所有元素都可以进行绑定事件。
事件类型
- 可取值:
tap
longpress
- 默认值:
tap
- 详情:事件类型由事件结构中的type来决定,支持同时绑定多个事件,但对于同一节点,不支持重复绑定相同类型事件。
// 绑定单个事件
{
"nodeId": {
"type": "'tap'",
"params": "$data.action"
}
}
// 绑定多个事件
{
"nodeId": [
{
"type": "'tap'",
"params": "$data.action"
},
{
"type": "'longpress'",
"params": "$data.action"
}
]
}
事件客户端实现
事件的响应(俗称路由)需要客户端代码的处理。
- Android端示例
// 初始化
GXTemplateEngine.instance.init(activity)
// 模板参数
val params = GXTemplateEngine.GXTemplateItem(activity, "biz", "id")
// 模板绘制尺寸
val size = GXTemplateEngine.GXMeasureSize(GXScreenUtils.getScreenWidthPx(this), null)
// 模板数据
val data = AssetsUtils.parseAssets(activity, "data.json")
val templateData = GXTemplateEngine.GXTemplateData(data)
// 创建模板View
val view = GXTemplateEngine.instance.createView(params, size)!!
templateData.eventListener = object : GXTemplateEngine.GXIEventListener {
override fun onGestureEvent(gxGesture: GXTemplateEngine.GXGesture) {
super.onGestureEvent(gxGesture)
// 处理事件
}
}
// 绑定数据
GXTemplateEngine.instance.bindData(view, templateData)
- iOS端示例
//iOS端
//templateItem
GXTemplateItem *templateItem = [[GXTemplateItem alloc] init];
templateItem.templateId = @"xxx";
templateItem.bizId = @"xxx";
//创建视图
UIView *view = [TheGXTemplateEngine creatViewByTemplateItem:templateItem
measureSize:CGSizeMake(100, NAN)];
//设置代理
GXTemplateData *data = [[GXTemplateData alloc] init];
data.data = @{};//设置数据源
//设置相关的代理 & 监听
data.eventListener = self;
data.trackListener = self;
//通过bindData触发
[TheGXTemplateEngine bindData:_data onView:_view];
//实现GXEventProtocal事件协议
- (void)gx_onGestureEvent:(GXEvent *)event{
NSdictionary *params = event.eventParams;
//to do
}