今天凌晨微信小程序(應(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)寫之后愣是沒(mé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)哭吧怎披,百度基本沒(méi)有任何線索,請(qǐng)google吧)瓶摆。
由于我是直接在公司項(xiàng)目中用的凉逛,本文的demo就不放github了,有什么問(wèn)題可以留言群井。