Modudle和Component扩展

WEEX的Moudle 和Component扩展

1 Module

1.1.1 Module 扩展

注意事项:

  1. Module 扩展必须继承 WXModule 类。
  2. 扩展方法必须加上@JSMethod (uiThread = false or true) 注解。Weex 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。
  3. Weex是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型。
  4. 同样因为是通过反射调用,Module 不能被混淆。请在混淆文件中添加代码:-keep public class * extends com.taobao.weex.common.WXModule{*;}
  5. Module 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数
  6. 完成 Module 后一定要在初始化时注册 WXSDKEngine.registerModule(“myModule”, MyModule.class); 否则会报类似错误:ReportException :undefined:9: TypeError: Object # has no method ‘printLog’

1.1.2 Module 注册

在客户端工程的application中的Engine初始化回调方法中注册Moudle

例如:

WXSDKEngine.registerModule(“picker”, WXPickersModule.class);

1.1.3 WXSDKInstance

WXModule提供一个WXSDKInstance对象,我们通过它mWXSDKInstance.getContext()可以获取到上下文Context,可以将它强转为Activity对象,获取到当前activity实例(Activity) mWXSDKInstance.getContext()。

2 Component

2.2.1 Component扩展

注意事项:

  1. Component 扩展类必须继承 WXComponent.
  2. Component 对应的设置属性的方法必须添加注解 @WXComponentProp(name=value(value is attr or style of dsl))
  3. Weex sdk 通过反射调用对应的方法,所以 Component 对应的属性方法必须是 public,并且不能被混淆。请在混淆文件中添加代码 -keep public class * extends com.taobao.weex.ui.component.WXComponent{*;}
  4. Component 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数
  5. 完成 Component 后一定要在初始化时注册 WXSDKEngine.registerComponent(“richText”, RichText.class);

2.2.2 Component注册

在客户端工程的application中的Engine初始化回调方法中注册Component

例如:

WXSDKEngine.registerComponent(“richText”, RichText.class);

2.2.3 Component生命周期方法

组件中有继承自WXComponent的生命周期方法,在需要的时候重写,做相应的操作。

2.2.4 fireEvent

向JS环境发送一些事件,比如click事件

void fireEvent(elementRef,type)
void fireEvent(elementRef,type, data)
void fireEvent(elementRef,type,data,domChanges)

elementRef(String):产生事件的组件id

type(String): 事件名称,weex默认事件名称格式为"onXXX",比如OnPullDown

data(Map<String, Object>): 需要发送的一些额外数据,比如click时,view大小,点击坐标等等。

domChanges(Map<String, Object>): 目标组件的属性和样式发生的修改内容