weex实践初探

2023-10-26

weex是阿里2016年开源的项目,号称通过撰写HTML/CSS/JavaScript来开发原生android/ios的UI界面,并且接近原生的性能体验。“写一次,多端编译”一直是无线移动追求的目标,既然阿里牛皮吹得这么大,本人也非常迫切体验一下。下面整理了一下学习weex的步骤和知识点,仅作入门参考。

一、Weex环境搭建

•1.安装node.js
•2.安装 Weex 命令行程序WeexToolkit
npm install -g weex -toolkit
•3.上面安装好后 开始建立项目在dos中运行weexinit 提示输入项目名,默认位置在当前dos目录下
•4.项目文件夹中package.json 可查看所有依赖库
•5.项目文件夹中webpack.config.js 可配置输出编译后的js路径
•6.启动监听和服务npm run dev      npm run serve
•7.运行npm run dev 命令后提示缺少依赖包错误如’ webpack’
•   可使用npminstall – webpack进行安装

二、WEEXSDK集成到工程

•Android集成有两种方式
•1. 源码依赖:能够快速使用 WEEX 最新功能,可以根据自己项目的特性进行相关改进。
•2.SDK 依赖:WEEX会在 jcenter 定期发布稳定版本。Jcenter注:国内可能需要翻墙

三、Weex原理概述

•Weex 是跨平台,可扩展的动态化技术. 你能通过在Weex源码中写 <template>,  <style> 和  <script> 标签,然后把这些标签转换为 JS Bundle 用于
•部署,在服务端以这些 JSBundle 响应请求.当客户端接收到 JSBundle 时,它能用被客户端中的 JS 引擎用于管理Native 渲染;API 调用和用户交互.


•JSFramework


•虚拟 DOM.

四、编写.we文件

•WEEX代码由三部分构成: template (模板), style(样式)和 script (脚本)
•<template> :  必须的, 使用类HTML 的语法描述页面结构,内容由多个标签组成,不同的标签代表不同的组件。
•<style> :  可选的, 使用类CSS 的语法描述页面的具体展现形式。
•<script> :  可选的, 使用JavaScript 描述页面中的数据和页面的行为,Weex中的数据定义也在 <script>中进行。



1,找节点

•weex 中,可以通过在特定的节点上 设置 id 属性,以此来唯一标识该节点。然后可以用  this. $ el (id)来找到该节点


2.we文件中数据绑定

•Weex 使用_mustache_的语法( {{key}} )来对<template> 中的模板和 <script>里的数据进行绑定.一旦数据额模板绑定了,数据上的修改会实时的在
•模板内容中生效.



3,.we文件中嵌套.we文件

•经常我们会发现很多可复用的 weex文件,这时候可以封装成 weex组件。我们可以直接创建一个名为 foo.we 的文件 < foo >就是组件名



4,.we文件中逻辑控制

•Weex 前端语义支持通过两种特殊属性( if repeat)的设置来确定组件的显示状态,这会使得整个页面布局显得更加灵活
•if可以控制当前组件节点的 显示状态。如果设为 true,则会将当前节点置于 DOM中渲染,反之则会从 DOM中移除
•repeat属性用于控制具有相同样式或属性的组件节点做 重复渲染。它绑定的数据类型必须为数组,其中每个数组项的属性会分别绑定到需要重复渲染的各子组件上



5.we文件和嵌套we文件交互

•weex 遵循HTML attribute 命名规范,所以  不要在属性中使用驼峰风格(CamelCase ),使用  -连接符的 羊肉串风格(kebab-case)才是正确的打开方式
•子组件能通过 this.$dispatch([String type], [Object detail]) 方法向父组件传送数据。第一个参数代表 事件名,第二个参数则是 数据对象
•如果子组件的某个父组件通过 $on( 事件名 , [Function callback]) 方法注册了一个相同名字的属性监听,那么callback 函数将得到一个参数对象,并且参数对象的detail 属性值为子组件传递出来的数据对象。



6,.we文件组件中的事件-(Events)

•weex 允许对<template> 中的元素绑定事件处理器。属性名称是以 on... 为前缀加事件类型和处理函数名。例如onclick="handler“



7,.we基本样式

•所有 weex 标签都有以下基本样式规则


8,组件定义

•定义组件是通过一组选项来描述一个组件。这组选项总是被赋值给  <script>标签中的 module.exports 。
•module.exports = {
methods: {
•doThis: function () {...},
•doThat: function () {...}
–}
•}
•methods是一个映射,其中包含所有视图模型的方法。
•每个 data 或  method属性将被代理到视图模型实例中。所以,你能 通过 this.doThis () 调用方法。
•一个完整的例子:



9,.we生命周期

•Weex 视图模型现在支持生命周期内的钩子函数,这些钩子函数能被写为组件选项:
init : 在视图模型的构造函数开始调用时激活;
created : 当视图模型监听默认数据,但还未编译模板时激活;
ready : 当视图模型监听默认数据并且编译模板生成虚拟DOM 后被激活。



10,.we文件中调用已封装本地方法

< dom > 模块
•1.让页面滚动到那个对应的节点
•var dom = require ('@ weex-module/dom');
•dom.scrollToElement(this.$el('someId'), {offset: 10});
<stream > 模块
•stream.sendHttp(options, callback )
•stream.fetch(options,callback,progressCallback)


11,.we中调用原生方法

•Weex 提供了扩展机制,可以根据自己的业务进行定制自己的功能。
•主要分为两类扩展:
Module 扩展非 UI 的特定功能。例如sendHttp、openURL等。
Component 扩展实现特别功能的 Native 控件。例如:RichTextview,RefreshListview 等。
Adapter 扩展Weex对一些基础功能实现了统一的接口,可实现这些接口来定制自己的业务。例如:图片下载等。

Module扩展

•1.Module扩展必须继承 WXModule 类。
•2.扩展方法必须加上@WXModuleAnno 注解。Weex会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。
•3. Weex是根据反射来进行调用 Module扩展方法,所以 Module中的扩展方法必须是 public类型
•4.Module 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数
•5. 完成 Module后一定要在初始化时注册  WXSDKEngine.registerModule("myModule", MyModule.class);



Component扩展

•1. Component 扩展类必须集成 WXComponent.
•2. Component 对应的设置属性的方法必须添加注解@WXComponentProp(name=value(value is attror style of dsl))
•3. Weex sdk 通过反射调用对应的方法,所以Component 对应的属性方法必须是public,并且不能被混淆。请在混淆文件中添加代码  -
•keep public class * extends com.taobao.weex.ui.component.WXComponent{*;}
•4. Component 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数
•5. 完成Component 后一定要在初始化时注册WXSDKEngine.registerComponent("richtext",RichText.class);



Adapt扩展

•图片下载:
•需要时集成接口 IWXImgLoaderAdapter,实现 setImage 方法。


---- end --


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

weex实践初探 的相关文章

  • Weex简介和环境的安装——Weex的学习之路(一)

    Weex 致力于使开发者能基于通用跨平台的 Web 开发语言和开发经验 来构建 Android iOS 和 Web 应用 简单来说 在集成了 WeexSDK 之后 你可以使用 JavaScript 语言和前端开发经验来开发移动应用 也就是说
  • 自定义Weex组件——Weex的学习之路(八)

    在四月份和五月份的时候我用业余时间来学习weex 在这期间一直在看文档写demo 每一个组件都自己写demo运行一遍 我本人是做Android开发的 对JS CSS和Html有一定的了解 所以学习weex不是很难 然后我把自己所学的主要经历
  • 移动通信关键技术-多址技术和复用技术

    移动通信网络简介 现在是2017年 4G已经使用很多年了 那么回顾一下移动通信的历史发展 1G 以AMPS ATCS为代表的模拟通信系统 主要技术是FDMA 主要业务是语音业务 2G 以GSM为代表的数字通信 主要技术TDMA是 IS 95
  • Unity 移动方法总结

    Unity移动方法总结 在Unity3D中 有多重方式可以改变物体的坐标 实现移动的目的 其本质是每帧改变物体的position 通过Transform组件移动物体 Transform组件用于描述物体在空间中的状态 它包括位置 positi
  • 万字长文讲述我是怎样保送清华的

    点击 小卡片 回复 1024 获取大厂面试指南 背景 大家好 我是石头哥 本篇是系列文章第 4 篇 前三篇如下 家穷应该读大学吗 寒门学子的奋斗史 一 第一篇回忆了自己读小学的场景 寒门学子的奋斗史 二 第二篇讲了自己就读的贫困山区中学的
  • 《移动浪潮》读书笔记

    移动浪潮 一书深入浅出地解读了信息革命第五次浪潮即将为人们生活带来的巨变 首先论述移动的力量 它是一股无法阻挡的浪潮 将引发颠覆性的革命 随后从电脑逐渐小型化 纸张的消失 娱乐的自由 钱包 社交网络 医疗 教育乃至工农业等方方面面论述移动互
  • OpenCV源码Android端编译,用时三天,我编了个寂寞。。。

    学更好的别人 做更好的自己 微卡智享 本文长度为1526字 预计阅读4分钟 导语 全网首发微信二维码引擎Android平台移植 中有介绍OpenCV源码及扩展模块Android端的编译 其中扩展模块里的人脸细节特征点是准备要测试看看的 于是
  • 2020年下一个创业风口是什么?

    提到风口 大家总是兴致勃勃 满心期待的看完一个风口项目后 剩下的不是去选择执行 而是继续问道 还有其它的风口项目吗 所以 在我看来 对于大多数人而言 风口就是继续追问 没完没了的问还有其它的吗 今年没有抓住风口 告诉自己 不能灰心 明年拜菩
  • unity中控制主角的移动和旋转

    在游戏中我们通常要控制玩家的移动和旋转 首先我们说一下移动 移动的本质就是在Update 或LateUpdate 中不断修改物体的position来实现移动 移动的方法有4中 1 transform Translate 第一种方法与直接修改
  • 收集金币(人人网笔试)

    题目描述 小M来到了一个迷宫中 这个迷宫可以用一个N M的矩阵表示 在这个迷宫的某些位置中存在金币 一开始小M在迷宫的入口 矩阵的左上角 位置 1 1 处 迷宫的出口位于矩阵的右下角 位置 N M 处 每一次小M可以选择向下或者向右走到一个
  • unity 移动物体到指定位置的四种方法

    方法1 使用Vector3 MoveTowards void Update float step speed Time deltaTime gameObject transform localPosition Vector3 MoveTow
  • weex组件的样式:不可使用间接筛选器

    weex本身自带了很多vue中没有的组件 例如
  • 马斯克最新访谈全文,信息量极大,远见令人震撼

    建设太空文明和成为多星球物种是重要的 如果将来发生了第三次世界大战或者类似的事情 或者发生了全球性热核战争 那个时候可能地球上所有的文明都将被毁于一旦 但它至少能够继续在别的地方存在 作者 六毛 来源 车东西 特斯拉Model Y降价15万
  • unity中物体移动的几种方式

    1 简介 在unity3d中 有多种方式可以改变物体的坐标 实现移动的目的 其本质是每帧修改物体的position 2 通过Transform组件移动物体 Transform 组件用于描述物体在空间中的状态 它包括 位置 position
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • RateLimiter 的底层实现是啥?

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 Rock
  • Weex实现富文本展示

    Weex默认不支持富文本展示 需要我们手动实现 已知的方式有两种 第一种方式 使用Weex Ui中的wxc rich text组件 它提供了丰富的功能样式 但是其局限性也是显而易见的 不能直接识别h5样式 第二种方式 第一步 自定义组件 请
  • 在腾讯连拿六个五星

    刚毕业入职腾讯工作 2 3 年 半年 年终绩效每次都是 5 4 星 不一定年薪百万 主要薪资 奖金无法决定 这个取决于股票是否上涨不少 但晋升肯定是最快的 在阿里拿 375 跟在腾讯拿 5 4 星的比例差不多 应届毕业能拿一次确实很优秀了
  • Weex 介绍

    文章目录 一丶Weex的介绍 二丶前置知识 三丶适用人群 四丶Weex的优势 五丶难点 六丶Weex ReactNative Flutter的区别 七丶设计理念 八丶基本原理 九丶有谁在用 十丶Weex调试工具 十一丶构建一个最简单的应用
  • Android面试题内存&性能篇

    Android面试题内存 性能篇 由本人整理汇总 后续将继续推出系列篇 如果喜欢请持续关注和推荐 更多内容可以关注微信公众号 Android高级编程 android tech 系列文章目录 Android面试题View篇 Android面试

随机推荐

  • ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

    报错内容 ImportError usr lib x86 64 linux gnu libstdc so 6 version GLIBCXX 3 4 29 not found required by home lab118 anaconda
  • 图解SSL/TLS协议

    http www ruanyifeng com blog 2014 09 illustration ssl html 一 SSL协议的握手过程 开始加密通信之前 客户端和服务器首先必须建立连接和交换参数 这个过程叫做握手 handshake
  • 联想小新潮7000安装deepin 系统

    deepin 是国内比较好的开源linux操作系统 安装也比较方便 1 下载ISO镜像文件和深度启动盘制作工具 deepin官网下载ISO 启动盘制作工具下载 2 按照官网的指导 一步一步安装系统 官网指导安装过程 win10进入bios的
  • STL-set-用法

    set集合容器实现了红黑树 Red Black Tree 的平衡二叉检索树的的数据结构 在插入元素时 它会自动调整二叉树的排列 把该元素放到适当的位置 以确保每个子树根节点的键值大于左子树所有节点的键值 而小于右子树所有节点的键值 另外 还
  • 益智小游戏点灯(迷你世界lua脚本)

    点灯游戏是一个十分有趣的智力游戏 有一行N行N列的灯 开始时全部是灭的 当你点击其中一盏灯时他的上下左右 若存在的话 状态全部改变 现在要求你在限定的时间内以最少地步数 将全部的灯点亮 点灯益智游戏 作者 韩永旗 迷你号 247312290
  • Java基础读取本地txt文件

    public class TxtTest public static String txt2String File file StringBuilder result new StringBuilder try BufferedReader
  • python中冒号(:)的作用

    python中冒号 的作用 一开始接触python代码的时候冒号这个存在一直困扰了我很久 说一下我对冒号的理解 冒号 表示的就是一个整体 冒号出现在哪里就代表这个位置对整体 第一 作为整体用于输出 如在plt scatter x 0 x 1
  • 【Leetcode】142. 环形链表 II

    题目描述 142 环形链表 II 给定一个链表 返回链表开始入环的第一个节点 如果链表无环 则返回 null 为了表示给定链表中的环 我们使用整数 pos 来表示链表尾连接到链表中的位置 索引从 0 开始 如果 pos 是 1 则在该链表中
  • 海明校验码

    1 海明码的特点 其中m表示数据位的位数 k表示海明校验码的位数 k位海明校验码一共可以表示种校验信息结果 其中有一种要用来表示没有出错的情况 则其余还剩 1种结果 为了使校验结果可以指出任一位出错的位置 则需要满足以上不等式 2 举例说明
  • 树莓派搭建K8S集群

    最近学习k8s知识 想用树莓派搭建集群 在网找了不少 就发现一篇文章可以搭建成功香橙派4和树莓派4B构建K8S集群实践之一 K8S安装 参考了不少 这里主要记录下遇到的一些问题 参考的文章 是香橙派和树莓派 我这里全是树莓派 所以是树莓派路
  • js判断Android、iOS或浏览器

    第一种 通过判断浏览器的userAgent 用正则来判断是否是ios和Android客户端 代码如下
  • Python 八大排序算法合集

    1 选择排序 选择排序 升序 不稳定排序 原理 给定一个列表 经过第一轮比较后 找到最小值 与第一个位置交换 接着对不包括第一个元素的剩下的元素 找到最小值 与第二个位置交换 重复该过程 直到进行比较的记录只有一个为止 以 list 5 4
  • 关于STM32F0407译出错问题

    嵌入式编译出错问题 关于STM32F0407译出错问题 OBJ BEEP axf Error L6218E Undefined symbol TIM ClearITPendingBit referred from main o OBJ BE
  • Android系统开发之修改Captive Potal Service(消灭感叹号)

    本文原作者 长鸣鸟 未经同意 转载不带名的严重鄙视 谷歌在Android5 0之后的版本加入了CaptivePotalLogin服务 本服务的功能是检查网络连接互联网情况 主要针对于Wi Fi 不让Android设备自动连接那些不能联网的无
  • 查看应用程序依赖库

    1 ldd 如果是用x86架构编译的话 ldd可查看依赖的动态库 ldd a out linux vdso so 1 gt 0x00007fff13cd9000 libc so 6 gt lib x86 64 linux gnu libc
  • 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式

    不知道怎么开发VR游戏 Unity5 3官方VR教程重磅登场 系列3 VR中的交互方式 王寒 4 个月前 https zhuanlan zhihu com p 20505470 概览 在VR项目中 我们需要在用户 凝视 某个物体时将其激活
  • h3c端口映射本地主机或服务器

    本地打开网站或服务器记住端口xxx 进入h3c服务器 进入内部服务器做端口映射 接口选择 wan口 使用当前外部IP 外部端口建议使用高数字端口YYYY 内部IP地址为服务器或网站所在的IP地址 内部端口为使用的端口xxx
  • chatgpt和copilot有关系吗

    chatgpt和copilot之间并没有直接的关系 chatgpt是一个开源的聊天机器人项目 是由谷歌开发的深度学习模型GPT 2 Generative Pre training Transformer 2 提供自然语言生成能力的一个实现
  • 学习笔记-Matlab算法篇-动态规划

    动态规划 01介绍 介绍 动态规划 dynamic programming 是运筹学的一个分支 是求解决策过程 decision process 最优化的数学方法 动态规划是求解某类问题的一种方法 是考察问题的一种途径 而不是一种特殊算法
  • weex实践初探

    weex是阿里2016年开源的项目 号称通过撰写HTML CSS JavaScript来开发原生android ios的UI界面 并且接近原生的性能体验 写一次 多端编译 一直是无线移动追求的目标 既然阿里牛皮吹得这么大 本人也非常迫切体验