項目中有個weex頁面需要選擇時間,在不清楚weex寫時間選擇器復不復雜的情況下,我覺得還是直接調用native的時間選擇控件,選擇完時間之后把時間傳遞到weex然后刷新頁面。
但問題也隨之而來:我怎樣在選擇完時間之后把時間傳給weex頁面并主動刷新呢?由于之前也涉及到native和weex頁面傳數據的問題,但都不是native端主動的,換句話說:之前都是先響應weex頁面中的動作然后去調用native中的方法,native再回調給weex。很明顯的是weex-->native-->weex的一個過程。那么可以用callback回調數據給weex頁面:
var self = this;
var eventModule = require('@weex-module/event');
eventModule.xxx(function(ret) {
//do some work
});
但現在我需要的交互是native主動發送事件到weex,是native-->weex的過程(weex中需要有個全局事件來監聽native中的動作)。思考了良久不知道如何解決,問題在于weex怎么響應我native端的動作的,這個貌似是用callback解決不了的問題啊(其實后來我才知道可以通過在page的created事件時去調用native module,并把js的callback注冊給native,native存為變量,然后在需要調用時通過callback觸發js的處理函數,這樣也可以實現直接從native-->weex)。
QQ20161118-0.png
不支持全局事件????不會吧!!!
繼續找,在某條Issue的底部發現這么一段話:
QQ20161118-1.png
前幾天剛把sdk換成0.8的,ok了,看文檔吧:http://alibaba.github.io/weex/doc/modules/globalevent.html
完美搞定:
iOS native端
-(void)refreshWeexPage:(NSNotification *)notif{
NSDictionary * dic = notif.userInfo;
//傳一個dic到weex
[weexInstance fireGlobalEvent:@"geolocation" params:dic];
}
weex端
ready: function () {
var self = this;
var globalEvent = require('@weex-module/globalEvent');
globalEvent.addEventListener("geolocation",function(e){
//do work or refresh
});
},
google搜了半天只有只言片語,還是跑github去找issue才發現解決辦法(百度根本沒有任何信息,吐槽一下百度),所以就目前來說,在weex開發中遇到問題最靠譜的還是去提issue或查找別人的issue看看別人的問題怎么解決的。
ok,結束,記錄一下,給遇到同樣問題的童鞋。有不懂得可以留言。