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

    最近在研究WeX5,想在这里记录下使用过程中的点滴,今天先把之前已经掌握的分享一下。 WeX5官方的开发指南难度系数较大,面向的受众可能是已经敲过上万行代码的html5 app开发者。但是作为一个刚进入代码世界的html5 app开发宝宝,本人表示拿着这份指南也找不到“南”,  先抛开官方版的,下面就来看看进击版的Hello World吧。

基础部分

1、准备工作:打开hml5 app 开发工具——WeX5(路径:WeX5\studio\studio.exe),在左侧模型资源管理器中建立HelloWorld目录并新建W文件,模板选空白的就好。这一步有问题找右键。

    

2、鼠标拖一个Output放到W页面上,效果如下:

    

3、在属性标签页设置Output的外观样式,这里常用的是class(设置类型),style(设置具体的样式),我这里就设置了一下Output的红色边框。这里都是可视化鼠标操作,就不多说了,各种样式可以尽情探索,不要生怕点错了会弄疼软件哈。

    

4、一番精心打扮之后,当然要看看运行效果啦,试运行的步骤是:先启动Tomcat,然后在W文件上右键选择“用浏览器运行”。记得要先保存W文件再试运行才能看到改动效果哦。

    

    通过简单的鼠标操作,很简单就能设置好Output控件的外观,这个也是WeX5的强大之处。而且更重要的一点是,所有设置都是符合html5 标准的!比如说你要设置一个控件的位置,并不能直接拖动控件到你想要的位置,而要通过边距、定位等设置才能定位。所以即使是使用WeX5进行开发,还是要懂基本的HTML、CSS、JavaScript的,这里推荐不太熟悉的亲们去稍微学习点基本的html5基础知识。新手不用太纠结细节,先整体了解,日后碰到具体问题再去找相应的解决办法。当然,小茄这边也会分享相关的内容,大家可以关注哈~~~

5、上面的鼠标流操作设置好了外观,但还没看到Hello World的影子呢。大家肯定也想到了要在Output中输出Hello World,具体操作也非常简单:在属性标签页的“bind-ref”内输入“Hello World”就可以啦,注意要用英文模式的双引号把Hello World引起来。有点编程基础的同学都知道,用双引号包起来的才是字符串,没有双引号的话就是变量了。这样就设置好了,试运行时在Output里面就能看到效果了。

    

    PS:这里的“bind-ref”是WeX5中的一个数据绑定机制,可以将其想象成一个管道,通过这个管道可以将不同组件间的数据绑定起来。例如我这里有两个Output组件,我们可以简单的通过bind来讲两个组件的值绑定起来,但只是绑定的话并没有动态刷新的功能,如果需要像官方Hello World那样做到动态刷新,还需要将绑定的值设置为可观察对象。这个部分理解起来比较难,后续我会单独开一个章节去讲这部分,本文先略过。

    注意:原生的Web写法应该是在标签内写入要显示的内容,例如:Hello World。
但是WeX5将基本的HTML组件进行了封装,而且为了方便管理数据还引入了数据绑定机制,
每次进行组件初始化的时候都会调用相应的构造函数去初始化组件,所以即使在Output组件的源码中加入Hello World:

<div component="$UI/system/components/justep/output/output" class="x-output" xid="output1" style="height:40px;" dataType="String">Hello World</div>

       但Output的innerText也还是会根据数据绑定的规则去初始化组件,如果没有绑定,则初始化为空值。因此,WeX5中除了原生的HTML标签外,都应该按照WeX5的规范使用数据绑定的方式来管理控件。

进阶部分

    上面这种纯输出的页面没什么意思,现在试试加点交互效果。比如说加个按钮,点击按钮改变输出信息为”Hello WeX5”。官方原版的Hello World案例中使用了WeX5的数据双向绑定机制来实现,因为我们都不熟悉WeX5的数据绑定机制,所以理解起来非常吃力。抛开绑定机制,WeX5的写法其实很简单:
Model.prototype.button2Click = function(event){
var output = this.getElementByXid('output1');
output.innerText = "Hello WeX5";
};
    WeX5提供了一个事件标签页来方便地设置组件的各种事件,这样一来可以一览组件的事件接口,二来也方便集中管理所有组件事件。使用方法就是在需要的事件中填入函数名(不填则使用默认函数名)并双击,然后就可以进入js源码页了,这里系统会自动生成Model.prototype.函数名 = function(event){}代码段。细心的同学会发现,这里的事件也是带bind前缀的。没错,这里也采用了数据绑定机制一样的实现方式,不过这里暂时先不用管这些,知道用法即可。

    

这里小茄也默认大家有Web编程基础的了,先对比原生的web写法:

<p id="output1">Hello World</p>
<button>Button</button>
<script type="text/javascript">
function button2Click(event) {
var output = document.getElementById('output1');
output.innerText = 'Hello WeX5';
}

</script>
    可以看出主要的差异点是WeX5中使用了xid代替了原生的id,所以要用getElementByXid来获取元素节点。之所以这样做的原因,主要是为了解决命名冲突的问题,在一个复杂页面中通常是将页面分成很多页面片段来开发的,而很多时候某几个页面片段都可能引用了同一个组件,那么在总页面中就会产生id的命名冲突。而xid是通过在id后面加入一个页面标示,即使是同一个id在不同的页面片段中的xid也是不同的,这样就解决了id冲突的问题。

    另外一点差异是WeX5中还创建了一个Model对象,页面中资源都放入了Model变量中,使用的时候也要在Model中进行操作。而原生的写法是将所有函数和变量都放在全局环境中,使用的时候直接引用全局中的函数变量。当一个页面比较复杂的时候,全局下就会有非常多的函数和变量,这样就容易产生变量冲突和变量覆盖,因为js中是可以重复声明的,后声明的变量会覆盖掉前面声明的变量,这样一来后声明的函数就将前面的函数体覆盖掉了。更为严重的是,浏览器给js提供了很高的权限,你甚至可以覆盖掉系统提供的接口。比如说:
alert = function () { window.close(); }
alert("hello");
    这样alert就由报警变成了关闭页面,但浏览器是允许这种行为的,所以我们应该尽量避免污染全局变量。

    最后还有一点就是我们定义的方法是放在Model.prototype之下的,也就是放在Model原型下面的。也就是说采用了混合模式(构造+原型)来创建对象,当然,直接写在对象下也是OK的,只是不推荐这种写法,例如:
var Model = function(){
this.callParent();
this.button2Click = function(event){
var output = this.getElementByXid('output1');
output.innerText = "Hello WeX5";
};
};

总结
    上面的例子实现了一个按钮改变输出文字的功能,通过这个例子,大家应该能掌握WeX5中页面布局设计与简单交互事件的写法,上面介绍的写法与原生比较相似,对有web基础的同学来说应该是很好理解的。没有基础的同学,还是推荐先到w3school 去学习web基础,过一遍HTML、CSS,熟悉一下js语法即可。
关于Hello World可说的内容还有许多,下一篇我会介绍一下HTML源码以及js源码结构。

附录:官方Hello World的WeX5写法与原生js写法对比,可以看出在页面复杂的时候WeX5的代码更简洁,更方便管理。

原生js写法:

Input1: <input type="text" id="input1" value="" /><br />
Input2: <input type="text" id="input2" value="" />
<script type="text/javascript">
var input1 = document.getElementById('input1'),
input2 = document.getElementById('input2');
input1.addEventListener('input', function (e) {
input2.value = this.value;
});
input2.addEventListener('input', function (e) {
input1.value = this.value;
});

</script>

WeX5写法:

define(function(require){
    var $ = require("jquery");
    var justep = require("$UI/system/lib/justep");
    var Model = function(){
        this.callParent();
        this.input1 = justep.Bind.observable(""); //核心语句
};
    return Model;
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

过滤器,绑定事件,动画

一、基本过滤器 语法描述返回值:first选取第一个元素单个元素:last选取最后一个元素单个元素:not(selector)选取去除所有与给定选择器匹配的元素集合元素:even选取索引是偶数的所有元素(index 从0开始)集合元素:odd选取索引是奇数的所有元素(index 从0开始)单个元素:eq(index)选…

python操作mysql数据库的常用方法使用详解

python操作mysql数据库1、环境准备&#xff1a; Linux安装mysql&#xff1a; apt-get install mysql-server安装python-mysql模块&#xff1a;apt-get install python-mysqldb Windows下载安装mysqlpython操作mysql模块&#xff1a;MySQL-python-1.2.3.win32-py2.7.exe 或 MySQ…

c语言稀疏矩阵的存储,C语言:数据结构-稀疏矩阵的压缩存储

https://m.toutiaocdn.com/group/6712258385510662667/?appnews_article&timestamp1562855219&req_id201907112226580100230300187166DEA&group_id6712258385510662667(1)稀疏矩阵的特点在一个mn的矩阵中&#xff0c;设矩阵中有i个元素不为零&#xff0c;并令△i/…

计算机C语言课交作业怎么交,第一份c语言作业

2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样&#xff1f;•答案&#xff1a; 软件工程专业是个年轻的专业&#xff0c;紧跟这个信息化的新时代。我学习它是因为感兴趣&#xff0c;经过一周的学习&#xff0c;我了解了一些 该专业课程主要是c语言程序设计和计算机导…

技术淘宝

? ? ? ? 精度前端学习 —— 前端开发100天&#xff08;置顶&#xff09; http://alloyteam.github.io/CodeGuide/https://github.com/AlloyTeam/CodeGuide cmd控制台的小技巧&#xff1a;可以直接将文件夹/文件丢进去&#xff0c;这样就会打印出该路径了。 舒服的字体家族…

vue 导出_Vue核心知识:8.3 vuex在vue-cli中的应用,文件之间的导出与引入

问题&#xff1a;vuex在vue-cli中的应用第一步&#xff1a;npm下载vuex资源包&#xff1a;npm install vuex --save第二步&#xff1a;在 src/main.js 中引入import Vue from vue import Vuex from vuexVue.use(Vuex)import store from ./vuex/store第三步&#xff1a;在 src 下…

android界面设计字体大小,Andoird用户界面设计上手指南:设置字体大小

教程详解技术应用: AndroidOS / Android SDK难易程度: 简单预计完成时间: 15分钟【51CTO译文】在本文中&#xff0c;我们将介绍一些简单的处理方式&#xff0c;帮助开发人员轻松编写出能够应对各类设备型号的应用程序文本方案&#xff0c;同时为用户提供自定义文字尺寸功能。别…

回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案

回溯算法解决八皇后4-皇后问题 (4 - Queens problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 chessboard, satisfying the constraint that no two queens should be in the same row, same column, or in same diagonal. 在4个皇后问题中 &#xff0c…

怎么重置blockinput的锁_OPPOA9锁屏密码忘了怎么办? OPPO忘记锁屏密码的解决办法...

看点&#xff1a;iPhone X原装屏与国产屏有哪些区别&#xff1f;看点&#xff1a;换7P、8P屏幕&#xff1a;C11和DTP和DKH的区别狮淘&#xff1a;不锈钢拆机片5个只需9.9元&#xff01;包邮&#xff01;每天10名OPPOA9锁屏密码忘了怎么办&#xff1f;OPPO A9手机忘记了锁屏密码…

Android的面孔_Actiyity

一、什么是Activity&#xff1f; 简单的说&#xff1a;Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成&#xff0c;都会在Manifest.xml中指定一个主的Activity&#xff0c;如下设置 <actionandroid:name"android.in…

vsco怎么两个滤镜叠加_10 款超美的 VSCO 调色滤镜,怎么用都好看!

VSCO 里的滤镜简单 又 好看可太让人喜欢了&#xff01;但是 VSCO 的滤镜实在太多太多了有点让人眼花缭乱~今天旅拍菌请来了 摄影博主 丹丹儿啊专门来为大家盘点一波超美的 VSCO 滤镜合集&#xff01;怎么用 都很好看~微博&#xff1a;丹丹儿啊01滤镜&#xff1a;1ND1锐化&#…

Kubernetes Master High Availability 高级实践

才云科技云开源高级工程师唐继元受邀DBAplus社群&#xff0c;在线分享《Kubernetes Master High Availability 高级实践》&#xff0c;介绍如何构建Kubernetes Master High Availability环境。 以下是分享实录&#xff1a; 大家好&#xff0c;我是才云科技的唐继元&#xff0c;…

分布式系统的唯一ID

2019独角兽企业重金招聘Python工程师标准>>> 需求 为什么需要唯一ID 让分布式系统中的需要辨别的元素&#xff0c;都能有唯一的辨识标志。 几乎所有的业务系统&#xff0c;都有生成一个记录标识的需求&#xff0c;例如&#xff1a; 消息标识&#xff1a;message-id订…

android放微信@功能,Android仿微信语音消息的录制和播放功能

一、简述效果&#xff1a;实现功能&#xff1a;长按Button时改变Button显示文字&#xff0c;弹出Dialog(动态更新音量)&#xff0c;动态生成录音文件&#xff0c;开始录音&#xff1b;监听手指动作&#xff0c;规定区域。录音状态下手指划出规定区域取消录音&#xff0c;删除生…

sap中泰国有预扣税设置吗_泰国的绘图标志| Python中的图像处理

sap中泰国有预扣税设置吗A colored image can be represented as a 3 order matrix. The first order is for the rows, the second order is for the columns and the third order is for specifying the color of the corresponding pixel. Here we use the BGR color format…

Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)

上一节我们讨论了 attach volume 操作中 cinder-api 的工作&#xff0c;本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Instance。 cinder-volume 初始化 volume 的连接 cinder-volume 接收到 initialize_connection 消息后&#xff0c;会通过 tgt 创建 ta…

FMDB的介绍

2019独角兽企业重金招聘Python工程师标准>>> FMDB方法的介绍 1.首先我们需要创建一个FMDatabase实例&#xff1a; (FMDatabase*)DataBaseSigonInstance { //数据库初始化 NSString *homeDir NSHomeDirectory(); //NSLog("%",homeDir); NSString *dbPath …

网络克隆软件_网文生成器,克隆的是骗钱“病毒”

文章克隆器页面。图据北京晚报如今不论男女老少&#xff0c;多半喜欢用手机收集信息、浏览自己关注的话题。有的时候&#xff0c;人们会发现&#xff0c;不少亲朋发来的链接或者公众号推送的文章&#xff0c;长得特别像&#xff0c;但多少有那么些微不同。其实&#xff0c;不是…

使用python 对图片进行水印,保护自己写的文章

1&#xff0c;关于文章被爬 说起来挺桑心的&#xff0c;好不容易写的文章&#xff0c;被爬走。 用个搜索引擎搜索都不是在第一位&#xff0c;写的文章全给这些网站提供流量了。 这种网站还居多广告。 还是抱怨少点吧。csdn对于这些事情也是无所作为啊。 最起码的防盗链也不…

android layout_width 属性,android:layout_weight属性详解

在android开发中LinearLayout很常用&#xff0c;LinearLayout的内控件的android:layout_weight在某些场景显得非常重要&#xff0c;比如我们需要按比例显示。android并没用提供table这样的控件&#xff0c;虽然有TableLayout&#xff0c;但是它并非是我们想象中的像html里面的t…