weex实践初探

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 --


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值