【分享】WeX5的正确打开方式(2)

我的上篇文章介绍了WeX5中基本的页面布局和交互事件写法,有人私信我为什么源码中的js要那样写,HTML源码的结构是怎样的之类。那今天就总结一下Hello World的源码结构,才识有限,有疑问欢迎大家继续私信我,一起钻研 ,一起进步。

HTML部分

在上篇Hello World的案例中,我们是通过新建一个w文件来进行页面样式布局的,这里可能有同学会疑惑:怎么没看见HTML文件呢?最终的HTML文件在哪?而且w文件的结构也跟我们常见的网页结构不同啊,常规的<hear>、<body>标签都没有呢,这是怎么回事?
   首先要明确的一点就是:w文件只是一个页面片段,通俗地说就是一小段HTML代码。在实际运行的时候,比如说调试的时候WeX5会将该页面片段以及相应的资源加载到一个页面框架中,从而获得最终的整页显示效果。也就是说,可以将很多w文件加载到一个页面中,比如官方的外卖案例中,地图定位被做成一个w文件,然后在需要的时候中调用它,这就是所谓的按需加载了。

那怎样得到一个完整的页面呢?这就需要通过编译了,具体可以参考WeX5官方的Hello World教程中的编译和部署。简单来说就是在Native目录下新建一个本地App,指定主页为Hello World的w文件,然后执行“编译使用到的UI资源”。编译后在www目录下会有一个index.html文件,这就是整个页面的html文件。
    先看看Hello World中的w文件源码(点击编辑器左下角的源码标签):

从上到下分别是window组件、model组件、output组件和button组件。window组件就是整个w文件的容器,output组件和button组件是我们添加上去的,都很好理解。但是怎么会有个model组件呢?生成的页面上好像也没看见这个model组件呀?这是用来做什么的呢?
    在页面应用中,除了UI和人机交互之外,我们还需要做很多数据的处理。简单的应用中我们直接就把数据嵌入到js的变量中去了。但是数据比较复杂的情况下,这种做法在管理上比较困难了。WeX5的做法是将数据单独抽出来做成一个独立的data组件,每个data组件管理相应的数据,规模较大的应用上会有比价多的data组件,所以就需要一个容器来接纳这些data组件,这个容器就是model组件了。
    注意:上篇中也有介绍js源码中的Model对象,实际上这两个model代表含义是一样的,都是代表着这个页面片段的所有资源(包括变量、dom节点等)。当然,好奇的同学可以试过删除它但发现没什么影响,这里要了解HTML源码中的model是整个model的一个映射,js中的model才是源头。

再看看完整的html文件,由于WeX5采用了按需加载的机制,所以必须要到浏览器打开才能看到真正完整的整页页面哦:

红框部分为w文件编译而成的HTML代价,可以看到编译后的代码增加了很多内容,有为了避免命名冲突而加的,有将数据绑定关系转换过来的内容等。一般来说我们用WeX5做开发只需要做好w文件即可,并不需要直接写现成的HTML代码。

JavaScript部分

先打开js源码(点击编辑器左下角的JS标签):
    

熟悉Html5 app 开发的同学一眼就能看出,这是模块化的写法。WeX5中采用的是AMD规范的requirejs实现模块化开发,每个w文件自动配置一个同名的js文件,在页面加载的时候自动加载相应的js文件。js文件中所有的js代码被包裹在一个define语句里面,同时在内部定义了一个Model对象并在最后输出这个Model对象。其实这里的思路也很简单,就是将所有与该w文件相关的js代码放入define中隐藏起来,避免污染全局变量(这一点上一篇也说过),同时通过Model对象向外界暴露相应的接口,这样外界就可以通过这些接口对内进行操作了。另外,第一二行定义变量就是引入jQuery和justep框架,跟平常使用jQuery一样的,如果要引入其他模块也可以用同样的方式。当然,你也可以写成 define([引用模块1,引用模块2], function(模块1参数,模块2参数) { 执行代码 } ),采用这种写法要注意各个参数与模块对应起来,否则就会出错。

说了这么多,那我们的代码应该怎么写?
    需要对外暴露的信息写入var Model = function(){};中,需要对外暴露的方法推荐写到Model原型里(Model.prototype.你的方法=function(){};),其他隐藏信息直接写到define内即可。比如:

变量a、b和函数add都不在Model内,也就是这些信息外界都不能访问到,这样就实现了模块内部的封装。更多关于前端模块化开发的内容,可以看看阮一峰的博文:Javascript模块化编程。
另外还要一点:在设计编辑器中直接绑定的变量,都是在Model之下的。比如增了一个input然后将bind-value设置为myValue,那么这个myValue变量就是在Model之下的,可以通过myValue来访问。

总结:Model就是js模块对外的接口,w页面与同名js文件的联系通过绑定机制来实现。

CSS部分

大家看到HTML源码的时候也应该发现了,通过可视化编辑器设置的样式是内联式的。很多人第一反应就是内联样式不好,但不好在哪?外联的好处又在哪?
内联样式因为直接写入HTML中,表现与结构重度耦合,不利于管理和改动,另外一些本可以重用的样式也直接写入内联样式中了,所以样式的重用性差。但是内联也是有很大的优势的:一是速度快,由于不需要查找CSS文件和定位样式,所以执行速度是最快的;二是可以减少HTTP请求,独立的CSS文件需要另外开HTTP请求去获取,而HTTP请求又是性能优化的最重要瓶颈。外联样式的好处网上已经说得太多,可以在不改结构的情况下快速批量化更改样式,样式的重用性好等等。
所以,小孩子才分好坏,成年人只看利弊。在WeX5中使用外联样式也是按需加载的,编写方式跟正常的html5 app开发一样的。官方建议的也是使用外联样式,降低后期维护成本。可以直接点击编辑器左下角的CSS标签进入CSS编辑器里面。这里也提供了可视化编辑(点击添加按钮)和直接键盘输入两种编写方法:


    个人强烈建议使用键盘直接输入,使用可视化编辑生成的样式还是比较臃肿的。写完保存之后,系统就会直接生成与w文件同名的css文件,在载入w文件的时候才会加载同名的js和css文件,实现按需加载。

总结

WeX5 Hello World的介绍就到这里了。通过Hello World案例,我们了解了组件可视化布局、样式设置、交互事件编写这三个最基本的操作,对应的是HTML、CSS、js三大部分。其实任何一种前端的工具、框架、类库都是基于这三大部分的集合,有了这些基础之后其他的知识点还是比较好理解上手的。

时间: 2024-11-04 09:21:12

【分享】WeX5的正确打开方式(2)的相关文章

【分享】WeX5的正确打开方式(7)——数据组件详解

本文是[WeX5的正确打开方式]系列的第7篇文章,详细介绍WeX5中数据组件的增删改查以及数据定位方法. 前言 上一篇 数据组件初探 我们简单介绍了数据组件的引入和底层结构以及特性,并实现了简单的数据展示和数据改动.上一篇中简单提到了,数据组件就是后台数据库表在前端的一个映射,前后端开发人员只要预定好数据组件的内容,就可以简单实现前后端开发的分离.既然数据组件是一个数据库表的映射,那它的基本结构就是一张 2 维表格,举个栗子,定义一个 html5开发工具 的数据组件,xid 为 devtool

【分享】WeX5的正确打开方式(1)

最近在研究WeX5,想在这里记录下使用过程中的点滴,今天先把之前已经掌握的分享一下. WeX5官方的开发指南难度系数较大,面向的受众可能是已经敲过上万行代码的html5 app开发者.但是作为一个刚进入代码世界的html5 app开发宝宝,本人表示拿着这份指南也找不到"南", 先抛开官方版的,下面就来看看进击版的Hello World吧. 基础部分 1.准备工作:打开hml5 app 开发工具--WeX5(路径:WeX5\studio\studio.exe),在左侧模型资源管理器中建立

【分享】WeX5的正确打开方式(3)——绑定机制

今天整理一下WeX5的绑定机制. 原生的问题  假设我们做一个订单系统,需要显示商品单价,然后可以根据输入数量计算出总价并显示出来.使用原生代码也很容易实现,效果:         代码如下: <!--HTML code--> Price: <span id="price"></span><br /> Account: <input type="text" id="account" value

关于格子之表白的正确打开方式

飞碟说69期:<表白的正确打开方式>优酷视频在线观看.你可能想不通, 我身高177.体重117.长相不错.家庭不错.成绩好.体育好.器大活还好,为啥她不喜欢我?飞碟君教你三招: 知己知彼才好下套.自恋和自卑是表白大忌.再牛的技术也比不上真情流露 .自古表白多白表,要经历多少次“十动然拒”,才能学会表白的正确打开方式? 飞碟说谈恋爱系列: 表白的正确打开方式 文字版台词 闽江学院男生赖国森向他心仪的蕾蕾,送出了一封212天写的16万字的情书,内容是回忆两人一起吃过的沙县,他将其装订成册,并取名&

Xcode 的正确打开方式——Debugging(转载)

Xcode 的正确打开方式——Debugging 程序员日常开发中有大量时间都会花费在 debug 上,从事 iOS 开发不可避免地需要使用 Xcode.这篇博客就主要介绍了 Xcode 中几种能够大幅提升代码调试效率的方式. “If debugging is the process of removing bugs, then programming must be the process of putting them in.”——Edsger W. Dijkstra 添加条件 有时候我们可

swf文件的正确打开方式

软件下载链接在此,可不必看下面的解释 最近在看新东方的英语口语视频教程(<新东方4+1英语口语教程>,也在此向大家推荐一下),可是在播放过程中,老是出现自己跳转到视频的起始位置并暂停的状况,很让人抓狂,我试了好几款视频播放器,结果都是一样.想着可能是视频文件的问题吧,也就没管它了,迁就着看了几集. 可是,第二天我贼心不死,百度之.在筛掉几个错误答案之后,发现了这款ZzFlash播放器,下载试了下,视频果然不跳了. 原来视频跳转的原因是:课程设定有跟读的内容环节,一般的视频播放器没有识别出这个东

转载:淘宝前端团队的干货《论版本号的正确打开方式》

引用原文评论的一句话:条理清晰, 如此甚叼! 论版本号的正确打开方式 作者: 法海 发表于: 2016-08-04 版本号广泛运用于开发的各种场景:NPM 包的版本定义.对 NPM 包的特定版本的依赖指定.git 的 daily 版本号分支…… 面对如此多的场景,版本号的命名却存在很大问题.举些例子: 开始写一个新项目 / 模块时,不管三七二十一,都从 0.0.1 起版本,直到项目不再维护时,版本还停留在 0.0.48,前两位永远都是 0. API 变化巨大,而版本号雷打不动一步一个脚印.一个二

任务队列和异步接口的正确打开方式(.NET Core版本)

任务队列和异步接口的正确打开方式 什么是异步接口? Asynchronous Operations Certain types of operations might require processing of the request in an asynchronous manner (e.g. validating a bank account, processing an image, etc.) in order to avoid long delays on the client si

区块链技术是版权保护的“正确打开方式”

21世纪是互联网的时代,也是知识经济时代.在互联网发展成熟的现阶段,网络成为了众人获取信息.知识.消遣的主要渠道.越来越多的人开始进入新媒体,网络的创作者人数也日益增加,同时网络上也带来了大量的网络版权问题.今天墨者安全就给大家说一下版权保护方面的事情. 为什么说区块链技术是版权保护的正确打开方式呢? 首先是因为区块链独有的特性,有着去中心化.高安全性.不可篡改.公开透明的特性.通过区块链技术可以完整的记录作品和创作者的详细信息,并全部公开:所有的节点都可以共同记录,共同维护:并且盖上不可篡改的