weex分爲組件component和模塊(module)以及事件html
組件就是各類標記組件,好比div 、slider、indicator等經過下面這種方式使用node
<div>android
<image src="..."></image>ios
<text>...</text>web
</div>npm
js模塊json
let modal = require('@weex-module/modal');瀏覽器
modal.toast({服務器
"message":"我是提示框",weex
"duration":2
});
其餘的還有stream,dom,animation之類的
事件
<div onviewappear="viewappear" onviewdisappear="viewdisappear">
......
</div>
Weex源碼結構
package.json
node_modules依賴,更重要的是裏面包含了npm run xxx 等快捷命令。好比以前咱們運行node.js程序是這樣的:$ node xx.js。這裏咱們能夠把它配置化,例如package.json文件中scripts的 「build:config」: 「node build/config.frameworks.js」,其實就是npm run build:config 至關於執行了node build/config.frameworks.js
start文件: 啓動程序文件,裏面包換編譯和啓動腳本:
examples: 示例Demo
android/ios/html: 各平臺代碼
build:打包各平臺的腳本,配置在package.json中。
native 渲染和 JavaScript 引擎之間,主要進行三類通訊:
圖:客戶端運行時的 JS 引擎和 native 之間的通訊
咱們在 JS 處理界面邏輯的過程當中採起了數據監聽+依賴收集的策略,既沒有經過髒檢查,也沒有經過全量 diff Virtual DOM 樹的方式
3. 服務端部署
咱們在服務端提供了基礎的程序包發佈,給每一個程序包一個特定的 page id,而後爲客戶端提供通用的服務,經過 page id 獲取程序包,這樣本地開發、動態實時部署、客戶端動態化渲染和邏輯處理就完美的串聯在一塊兒了
細節8:實際上,除了界面自己能夠動態化以外,客戶端的 JS 引擎的代碼、還有部分 native 的實現,咱們也準備了相應的動態化機制,也就是說客戶端的動態能力自己也是具備動態性的
4. 瀏覽器端渲染
同一份 JavaScript 程序包,能夠同時經過客戶端的 JS Bridge 渲染成爲 native 界面,也能夠經過瀏覽器渲染成爲 web 界面。咱們的作法也很是簡單,就是把 JS Bridge 背後的 native 處理邏輯同構成了 HTML5 版本。而後發佈這樣的一個頁面。
整個 Weex 的工做原理大體能夠用一張圖來表述:
目前Weex給你們直觀的感受是能夠用Weex寫不少頁面,有一個路由機制,內部叫導航,幫助你將頁面進行串連,咱們提供不少features,由這樣的形式構成Weex你們所看到的一個結
Weex的集成方式
目前Weex有三種集成方式:
頁面間通訊
頁面跳轉是經過指定下一個頁面的url,而後經過openurl或者push的方式來跳轉
獲取url的方式能夠經過下面這段JS代碼
function getAppBaseUrl(self) {
var dir ='examples'
var url = self.$getConfig().bundleUrl;
var bundleUrl = url;
bundleUrl = new String(bundleUrl);
var nativeBase;
var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
var isiOSAssets = bundleUrl.indexOf('file:///') >= 0;
if (isAndroidAssets) {
nativeBase = 'file://assets/';
}
else if (isiOSAssets) {
nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
}
else {
var host = 'localhost:12580';
var matches = /\/\/([^\/]+?)\//.exec(self.$getConfig().bundleUrl);
if (matches && matches.length >= 2) {
host = matches[1];
}
nativeBase = 'http://' + host + '/' + dir + '/build/';
}
var h5Base = './index.html?page=./' + dir + '/build/';
//Native端
var base = nativeBase;
//H5端
if (typeof window === 'object') {
base = h5Base;
}
return base
}
\
WXSDKEngine
WXSDKEngine主要用於初始化WeexSDK的環境
一開始會載入配置文件main.js而且註冊一些默認的組件、模塊以及handler
WXSDKInstance
一個WXSDKInstance就對應一個UIViewController,對應一個weex頁面。
主要用來渲染頁面,通常經過renderWithURL方法,而後可以接收一些回調和一些視圖相關的方法
WXBridgeManager
WXBridgeManager 是JS與iOS經過JSCore交互的類,相關的類還有WXBridgeContext、WXJSCoreBridge。
JS調用native的話須要經過WXJSCoreBridge的registerCallNative方法
WXComponent
組件基類,本身實現iOS端的組件須要繼承它。相關的還有負責組件初始化的工廠類WXComponentFactory,以及WXComponentManager
WXModuleProtocol
自定義module須要實現的協議
參考連接: