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

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

HTML部分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文件源码(点击编辑器左下角的源码标签):html5

图片描述
从上到下分别是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参数) { 执行代码 } ),采用这种写法要注意各个参数与模块对应起来,不然就会出错。app

说了这么多,那咱们的代码应该怎么写?
须要对外暴露的信息写入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部分dom

你们看到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三大部分。其实任何一种前端的工具、框架、类库都是基于这三大部分的集合,有了这些基础以后其余的知识点仍是比较好理解上手的。

相关文章
相关标签/搜索