Weex Module 擴(kuò)展

2023-12-27 16:47 更新
  1. Module 擴(kuò)展必須繼承 WXModule 類。
  2. 擴(kuò)展方法必須加上?@JSMethod (uiThread = false or true)? 注解。Weex 會根據(jù)注解來判斷當(dāng)前方法是否要運(yùn)行在 UI 線程,和當(dāng)前方法是否是擴(kuò)展方法。
  3. Weex是根據(jù)反射來進(jìn)行調(diào)用 Module 擴(kuò)展方法,所以Module中的擴(kuò)展方法必須是 public 類型。
  4. 同樣因?yàn)槭峭ㄟ^反射調(diào)用,Module 不能被混淆。請在混淆文件中添加代碼:?-keep public class * extends? ?com.taobao.weex.common.WXModule{*;}?
  5. Module 擴(kuò)展的方法可以使用 int, double, float, String, Map, List 類型的參數(shù)
  6. 完成 Module 后一定要在初始化時注冊 ?WXSDKEngine.registerModule("myModule", MyModule.class);? 否則會報類似錯誤:?ReportException :undefined:9: TypeError: Object #<Object> has no method 'printLog'?

示例如下:

public class MyModule extends WXModule {

  //run ui thread
  @JSMethod (uiThread = true)
  public void printLog(String msg) {
    Toast.makeText(mWXSDKInstance.getContext(),msg,Toast.LENGTH_SHORT).show();
  }

  //run JS thread
  @JSMethod (uiThread = false)
  public void fireEventSyncCall(){
   //implement your module logic here
  }
}

Register the module

WXSDKEngine.registerModule("MyModule", MyModule.class);

JS 調(diào)用如下:

<template>
  <div>
    <text onclick="click">testMyModule</text>
  </div>
</template>

<script>
  module.exports = {
    methods: {
      click: function() {
        weex.requireModule('MyModule').printLog("I am a weex Module");
      }
    }
  }
</script>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號