native給weex頁(yè)面?zhèn)髦狄约癢eex調(diào)用native方法(iOS端)

今天凌晨微信小程序(應(yīng)用號(hào))對(duì)外發(fā)送內(nèi)側(cè)邀請(qǐng),瞬間在廣大前端和移動(dòng)端界炸開了鍋。恩,H5或者說(shuō)JS的又一個(gè)春天來(lái)了。
原歸正傳,這里要說(shuō)的是在iOS端集成Weex時(shí)我們?nèi)绾谓oweex頁(yè)面?zhèn)髦担约皐eex頁(yè)面如何調(diào)用iOS的native方法呢?且聽我慢慢道來(lái)。
其實(shí)我這幾天一直在尋找native端往weex頁(yè)面?zhèn)髦档慕鉀Q方法,只是資料太少,于是乎我去github提Issues:https://github.com/alibaba/weex/issues/1270
(汗,鏈接居然404,google搜“【PR】請(qǐng)教下iOS 端 native怎么傳值到j(luò)s”吧)
很快得到回復(fù)。看了中文文檔之后,我大致知道應(yīng)該使用callback回調(diào):https://github.com/weexteam/article/issues/17
但是按照文檔來(lái)寫之后愣是沒成功,于是我又在qq群里提問(wèn),老司機(jī)說(shuō)是作用域不一樣,要在外部先聲明var self = this,像這樣:

var self = this
eventModule.openURL('', function(ret){
    self.nativeLog(ret)
})

所以接下來(lái)就是我的代碼了
1:新建WXEventModule類:

#import <Foundation/Foundation.h>
#import <WeexSDK/WXEventModuleProtocol.h>
#import <WeexSDK/WXModuleProtocol.h>
#import <WeexSDK/WXNetworkProtocol.h>
#import <WeexSDK/WXUtility.h>
@interface WXEventModule : NSObject <WXEventModuleProtocol, WXModuleProtocol,WXNetworkProtocol>
- (void)testAction;
@end
#import "WXEventModule.h"
#import "WGWeexTestViewController.h"
#import "WGWeexDemoViewController.h"
#import <WeexSDK/WXBaseViewController.h>

@implementation WXEventModule

@synthesize weexInstance;

//這里記得添加這個(gè)宏,這樣weex才能識(shí)別native的方法
WX_EXPORT_METHOD(@selector(openURL:callback:))


- (void)openURL:(NSString *)url callback:(WXModuleCallback)callback
{
   callback(@{@"result":@"1"});
}

@end

2:然后在Appdelegate方法中通過(guò)調(diào)用 WXSDKEngine 中的 registerModule:withClass方法來(lái)注冊(cè)自己的module

[WXSDKEngine registerModule:@"event" withClass:[WXEventModule class]];

3:在weex中:
這里的 require 里面的event 就是在 上一步調(diào)用registerModule: 注冊(cè)module 時(shí)候的name(我就直接復(fù)制文檔上的原話了-)。

methods: {
            
            updateHandler : function(e){
                //千萬(wàn)記得這句(先在外部聲明),不能在回調(diào)中直接使用this.function(),不然不執(zhí)行
                 var self = this;
                 var eventModule = require('@weex-module/event'); 

                   eventModule.openURL('test.js',function(ret) { 
                                      //回調(diào)執(zhí)行
                     self.loadVersionData(ret.result);
                                   

                   });
            },

恩,這樣就成功了,weex調(diào)用原生的方法,然后原生通過(guò)callback傳參數(shù)到weex頁(yè)面,這里要說(shuō)明下,callback(data)中這樣 data 支持的參數(shù)類型可以是 NSDictionary, NSString, NSArray, Int, Float, Bool ,具體可以看Issues:https://github.com/alibaba/weex/issues/866
由于weex剛開源不久,資料比較少,所以解決問(wèn)題的話還是直接去github上提Issues或者看別人的回答吧(使用百度的朋友請(qǐng)哭吧,百度基本沒有任何線索,請(qǐng)google吧)。
由于我是直接在公司項(xiàng)目中用的,本文的demo就不放github了,有什么問(wèn)題可以留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容