调用流程
注册流程
1 | ├── WXComponent.addEvents() |
响应流程
1 | ├── WXComponent.addClickListener |
代码解析
注册流程
1 | private void addEvents() { |
addEvents()
会获取 mDomObj
中的所有事件,然后根据每个时间的名称在 addEvent()
方法中为每一个事件注册监听器。
1 | public void addEvent(String type) { |
响应流程
1 | public void onHostViewClick() { |
在 WXComponent.onHostViewClick()
方法中会把当前 View
的 location 和宽高作为参数传递给 fireEvent
方法。
来看一下 WXBridgeManager.fireEventOnNode()
方法:
1 | public void fireEventOnNode(final String instanceId, final String ref, |
这里 onClick
事件并没有注册回调函数,因此会向 mJSHandler
发送 CALL_JS_BATCH
消息。
后面执行的 invokeCallJSBatch
和前面博客 Module 注册、调用和回调函数的执行流程 执行流程是一样的,这里不在介绍。
这里 WXBridge.execJS
执行的参数为:
1 | [{"args":["11","click",{"position":{"height":19.791666,"width":106.25,"x":321.875,"y":1315.625}},null],"method":"fireEvent"}] |
把参数传递给前端后会根据 instanceId 和当前元素的 Id 执行对应的方法。