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

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

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

所以接下來就是我的代碼了
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;

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


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

@end

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

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

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

methods: {
            
            updateHandler : function(e){
                //千萬記得這句(先在外部聲明),不能在回調(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)用原生的方法,然后原生通過callback傳參數(shù)到weex頁面,這里要說明下,callback(data)中這樣 data 支持的參數(shù)類型可以是 NSDictionary, NSString, NSArray, Int, Float, Bool ,具體可以看Issues:https://github.com/alibaba/weex/issues/866
由于weex剛開源不久,資料比較少,所以解決問題的話還是直接去github上提Issues或者看別人的回答吧(使用百度的朋友請哭吧,百度基本沒有任何線索,請google吧)。
由于我是直接在公司項(xiàng)目中用的,本文的demo就不放github了,有什么問題可以留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容