Weex 自定義 module

2023-12-27 17:18 更新

自定義 module,需要讓自己的 class 遵循 ?WXModuleProtocol? 這個(gè)protocol,通過 ?WX_EXPORT_METHOD? 這個(gè)宏暴露出需要透出到 ?JavaScript? 調(diào)用的方法,再向 WeexSDK 注冊 module,就可以完成一個(gè)簡單 module 的自定義。

  1. 新建一個(gè)基類為 NSObject 的 class ?WXCustomEventModule?,讓該類遵循? WXModuleProtocol? 的協(xié)議。 
  2. 添加打印的方法,通過 ?WX_EXPORT_METHOD? 暴露該方法。 
  3. 在初始化完成 Weex SDK 之后注冊該 module。 

到此,我們已經(jīng)完成了一個(gè)簡單的 module 方法的封裝,在 JS 里使用方法如下:

weex.requireModule("event").showParams("hello Weex")

Module 進(jìn)階

關(guān)于 Module 和 Module 方法的執(zhí)行特性(同步、異步;執(zhí)行線程),需要了解:

  1. ?weexInstance?:在一個(gè) Weex 頁面中,默認(rèn) WXSDKInstance 的實(shí)例持有多個(gè) module 的實(shí)例, 而 Module 的實(shí)例是是沒有對 WXSDKInstance 做持有的,在自定義的 module 中添加 ?@synthesize? ?weexInstance?,module 實(shí)例可以對持有它本身的 WXSDKInstance 實(shí)例做一個(gè)弱引用,通過 weexInstance 可以拿到調(diào)用該 module 的頁面的一些信息。
  2. ?targetExecuteThread?:Module 方法默認(rèn)會在 UI 線程(iOS 主線程)中被調(diào)用,建議不要在這做太多耗時(shí)的任務(wù)。如果你的任務(wù)不需要在 UI 線程執(zhí)行或需要在特定線程執(zhí)行,需要實(shí)現(xiàn) ?WXModuleProtocol? 中的 ?-?? (NSThread *)? 的方法,并返回你希望方法執(zhí)行所在的線程。
  3. ?WXModuleKeepAliveCallback?:Module 支持返回值給 JavaScript 中的回調(diào),回調(diào)的類型是? WXModuleKeepAliveCallback??;卣{(diào)的參數(shù)可以是 ?String? 或者 ?Map?。該 block 第一個(gè)參數(shù)為回調(diào)給 JavaScript 的數(shù)據(jù),第二參數(shù)是一個(gè) BOOL 值,表示該回調(diào)執(zhí)行完成之后是否要被清除。JavaScript 每次調(diào)用都會產(chǎn)生一個(gè)回調(diào),但是對于單獨(dú)一次調(diào)用,是否要在完成該調(diào)用之后清除掉回調(diào)函數(shù) id 就由這個(gè)選項(xiàng)控制,如非特殊場景,建議傳 NO。
  4. ?WX_EXPORT_METHOD_SYNC?:使用 ?WX_EXPORT_METHOD? 暴露到前端的方法都是異步方法(獲得結(jié)果需要通過回調(diào)函數(shù)獲得)。如果期望獲得同步調(diào)用結(jié)果,可以使用 ?WX_EXPORT_METHOD_SYNC? 聲明同步的 Module 方法。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號