【分享】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,一经查实,立即删除!

相关文章

linux multipath.log,Linux Multipath配置

关于Linux Multipath配置&#xff0c;网上还是很多的&#xff0c;自己再来梳理一下&#xff0c;当前环境为RedHat6&#xff0c;HP P2000存储1. 安装软件。查看是否安装 rpm -qa |grep device-mapperdevice-mapper-multipath-libs-0.4.9-31.el6.x86_64device-mapper-event-libs-…

python文件封装成jar_【Python】Python文件打包为可执行文件

之前写的用于创建、链接Jenkins slave脚本是使用Python实现的&#xff0c;为了使未安装Python环境的伙伴也可以直接使用&#xff0c;故需要将其可直接执行的exe可执行文件。一、安装pyinsatller在cmd控制台输入以下命令进行安装。pip install pyinstaller二、使用pyinstaller打…

svn , github工作流

svn 需要有一台中央服务器&#xff0c;所有的分支&#xff0c;主干&#xff0c;标签&#xff0c;全都保存在这台中央服务器上。开发着需要提交代码时&#xff0c;需要保持中央服务器连接。切换分支时会有本地与服务器网络连接。 git 改进了这一点&#xff0c;每台安装有git的机…

linux控制流程,Linux - Bash - 流程控制

sh的流程控制不可为空,不能什么都不能做&#xff0c;不能像php这样&#xff1a;if (isset($_GET["q"])) {search(q);}else {// 不做任何事情}在sh/bash里可不能这么写&#xff0c;如果else分支没有语句执行&#xff0c;就不要写这个else。if elseifif语句语法格式&am…

python文本词频统计是什么_python 大批量文本分词 以及词频统计 (高效处理案例)...

环境&#xff1a;python3.6库&#xff1a;jieba&#xff0c;xlwt&#xff0c;xlwings&#xff0c;collections前两天有个需求要对一张表里的中文语句进行分词&#xff0c;并统计每个词语出现的次数。表格1231.xlsx大致内容如下&#xff1a;由于表格内容过大&#xff0c;约有100…

c语言字符串匹配函数index,C语言(函数)学习之index、rindex

函数定义&#xff1a;char *index(const char *s, int c);头文件&#xff1a; #include strings.h函数说明&#xff1a;index()用来找出参数s 字符串中第一个出现的参数c 地址&#xff0c;然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。返回值&…

JZ-C-35

剑指offer第三十五题&#xff1a;第一个只出现一次的字符 1 //2 // Name : JZ-C-35.cpp3 // Author : Laughing_Lz4 // Version :5 // Copyright : All Right Reserved6 // Description : 第一个只出现一次的字符7 //8 9 #include <iostream> 10 #incl…

过滤器,绑定事件,动画

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

一周学好python_耗时一周整理的Python资料,包含各阶段所需网站、项目,收藏了?慢慢来...

不知怎么的&#xff0c;最近不少关注我的读者都开始私信我怎么学好python&#xff1f;零基础转行是不是合适&#xff0c;还有希望吗&#xff1f;今年30了&#xff0c;还能不能转IT&#xff1f;今天这篇文章&#xff0c;我花了一周的时间搜索、整理、调研、筛选&#xff0c;最后…

python中bool函数的用法_python3实战python函数每日一讲 - bool([x])

bool([x])英文说明&#xff1a;Convert a value to a Boolean, using the standard truth testing procedure. If x is false or omitted, this returns False; otherwise it returns True. bool is also a class, which is a subclass of int. Class bool cannot be subclasse…

c语言程序 强制关机程序,怎样用C语言编写关机程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include "windows.h"#pragma comment(lib,"user32.lib")#pragma comment(lib,"advapi32.lib")int main(){HANDLE hToken;LUID luid;BOOL bRaisedFALSE;TOKEN…

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…

python剑指offer面试题_剑指offer面试题Q10 斐波那契数列 python解法

Q10.斐波那契数列题目描述写一个函数&#xff0c;输入n&#xff0c;求斐波那契数列的第n项。解题思路思路一递归递归很简单但是并不能ACpython实现代码class Solution:def Fibonacci(self, n):# write code hereif n < 0:return 0if n 1:return 1return self.Fibonacci(n-1…

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语言程序设计和计算机导…

python风控工具_python-风控模型分析01

数据导入与查看# -*- coding: utf-8 -*-# %%time# from pyhive import prestoimport pandas as pdimport numpy as npimport warningsimport osdatapd.read_csv(*/全域风险.csv)data.head(2)# label pd.DataFrame(list(result),columnscolumns_names)# label.to_csv(/data/ljk/…

查看某个文件是否正在被修改

1、首先执行命令&#xff0c;写到1.log文件下面&#xff1a; find -name *.rdb|xargs stat| grep -i Modify | awk -F. {print $1} | awk {print $2$3}| awk -F- {print $1$2$3} | awk -F: {print $1$2$3} > 1.log 2、再等待1分钟&#xff0c;执行命令&#xff0c;写到2.log…

c语言位运算+乘法,关于c语言中的位运算。。。

标签&#xff1a;c位运算是一种针对二进制数的一种运算位运算 共有六种都有其对应得操作符号& (and) 位于| (or) 位或~ (not) 取反^ (xor) 异或>> (shr) 右移一位<< (shl) 左移一位运算说明&a…

python模型保存save_浅谈keras保存模型中的save()和save_weights()区别

今天做了一个关于keras保存模型的实验&#xff0c;希望有助于大家了解keras保存模型的区别。我们知道keras的模型一般保存为后缀名为h5的文件&#xff0c;比如final_model.h5。同样是h5文件用save()和save_weight()保存效果是不一样的。我们用宇宙最通用的数据集MNIST来做这个实…

技术淘宝

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