今天整理一下 html5 开发工具——WeX5中的各种绑定方式,下面分为表现类、流程类、交互类 3 种类型分别介绍。

表现类绑定

表现类的绑定属性有visible、text、html、css、style、attr几种,除了css表示css的class之外,其他都是字面意思。示范用法:

布局中加入一个div标签和一个按钮,并设置div标签的绑定属性如下右所示。

这样设定好了绑定关系,然后在 js 中将各绑定属性设置为可观察对象,让其可以自动更新界面:

define(function(require){var $ = require("jquery");var justep = require("$UI/system/lib/justep");var Model = function(){this.callParent();this.canVisit = justep.Bind.observable(true);this.htmlCnt = justep.Bind.observable("add HTML element : <button>btn</button>");this.myCls = justep.Bind.observable("div-one");this.myStyle = justep.Bind.observable({color: "blue", "font-size": "22px"});};Model.prototype.button2Click = function(event){this.myCls.set("div-two");this.htmlCnt.set('remove button, add link: <a href="#">link</a>');this.myStyle.set({border: "none", "font-size": "14px"});};return Model;
});

这里在 Model 构造函数里面初始化了各绑定属性,然后定义 button 的点击事件,在其中改变绑属性值。效果如下:

这里为了演示我没有使用text绑定,text绑定只能显示字符,不能将标签显示出来。另外,text 和 html 绑定都是对内容进行修改,而同时修改内容会发生冲突,所以不能同时应用这两个绑定。

注意,因为 js 的变量命名中不能带 [ – ] (减号),所以引用带[ – ]的CSS类名时需要用引号包起来。 style里面的内容也一样,这个也是JSON格式的要求了。

流程类绑定

流程类包括foreach、if、ifnot、with绑定,if 和 ifnot 与 visible类似,差别就是:if 会直接从DOM中移除相应的组件,而visible只是控制隐藏显示,组件还是在DOM里面的。with 跟 js 中的 with 也是一样的效果,就是延长了作用域链,简单的来说就是在变量前加了个’前缀.’。这里只介绍一下foreach,其他绑定请参考wex5官网绑定教程。

foreach顾名思义,是针对每一项进行操作的,一般用在对多组数据的绑定上。这次我们使用 html 原生的 ul 标签来做个示范:

先往界面编辑器里面放入一个list,并在list里面放入3个span标签用于显示,设置list的 bind-foreach为 items,然后分别设置3个span的 bind-text为 $index,itemName,creatTime:

再编写js如下:

define(function(require){var $ = require("jquery");var justep = require("$UI/system/lib/justep");var Model = function(){this.callParent();this.items = [{itemName: "JavaScript", creatTime: "Feb 10 2013"},{itemName: "HTML", creatTime: "Mar 21 2015"},{itemName: "CSS", creatTime: "May 13 2016"}];};return Model;
});

效果:


现在只是单纯的初始化数据,如果需要监视数据的变动,那就要用 this.items = justep.Bind.observableArray([{ itemName: ……}])来将数组设置为可观察对象。

这里我们在list上设置foreach为items,那么list下的子项和items下的子项就对应起来了,所以list子项的span就能直接绑定item子项里面的数据,这个跟js中的作用域是一样的。在使用foreach时要注意作用域的层次,否则很容易搞乱。这里再给一个案例,通过这个案例应该可以很好理解foreach绑定中的作用域范围了。

<ul component="$UI/system/components/justep/list/list" class="x-list x-list-template" xid="list1" bind-foreach="items"><li xid="li1">NO.<span xid="span1" bind-text="$index"></span><span xid="span2" bind-text="itemName"></span><span xid="span3" bind-text="creatTime"></span><a xid="a2" bind-click="$parent.removeItem">removeItem</a></li>
</ul>
<a component="$UI/system/components/justep/button/button" class="btn btn-default" label="button" xid="button1" bind-click="addItem"><i xid="i1"></i><span xid="span4"></span>
</a>
HTML Codedefine(function(require){var $ = require("jquery");var justep = require("$UI/system/lib/justep");var Model = function(){this.callParent();var that = this;this.items = justep.Bind.observableArray([{itemName: "JavaScript", creatTime: "Feb 10 2013"},{itemName: "HTML", creatTime: "Mar 21 2015"},{itemName: "CSS", creatTime: "May 13 2016"}]);this.addItem = function () {that.items.push({itemName: "WeX5", creatTime: new Date().toDateString()});};//remove的对象是整个 li标签,也就是 a标签的父对象。实际上要执行的是 Model.items.remove(a.parent)this.removeItem = function() {that.items.remove(this);};};return Model;
});
HTML Code

交互类绑定

交互类绑定主要用在表单中,包括常用的value、textInput、options、submit以及validation等。下面简单说说。

(1)value绑定

使用方法和上面的一样,在界面设计器中绑定bind-value,然后在 js 中进行相应的操作即可。比如官方的Hello World教程,也可以用 value 绑定来改写:

先往界面编辑器中加入一个output控件和一个input控件,设置output控件的bind-text为‘Hello, ’+ mybind.get(),然后设置input控件的bind-value为mybind。然后在js中将mybind设置为可观察对象即可。

这样效果就出来了,每次输入完输入框失去焦点后output的内容就会被刷新。如果要让输入值马上更新到output中,那就要配置一个附加参数,bind-value设置为 myBind, valueUpdate: ‘afterkeydown’。效果:

(2)textInput绑定

属性HTML5的同学会知道DOM3事件中新增了一个 ‘textInput’事件,WeX5中也支持这个事件的绑定,目前可视化界面中还没有这个事件,但是可以在自定义属性中使用它。

如果需要实时同步效果的话,更推荐这个textInput方法,不单更加简单,对浏览器的支持也更加好。

(3)options、selectOptions绑定

在下拉列表中可使用 options 来绑定子项的值,子项既可以是字符串,也可以是 js 对象。操作与上述绑定一样,在select控件上自定义属性bind-options,在js中设置其绑定值为可观察对象数组(如this.listItem = justep.Bind.observableArray([“Mark”,”Jimmy”,”Denny”]);)。绑定 js 对象也基本一样的操作,只是需要注意设置相关的属性。具体可参考官方教程:http://docs.wex5.com/data-bind-options/

(4)hasFocus绑定

这个主要用在输入框上,不过原生事件中也有个focus,所以显得不是特别有用,这里给个案例。

代码:

<!-- HTML code -->
<p>Name:<b bind-visible="!editing.get()" bind-text="name" bind-click="edit"> </b><input bind-visible="editing" bind-value="name" bind-hasFocus="editing"/>
</p>
<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>
HTML Codedefine(function(require){var $ = require("jquery");var justep = require("$UI/system/lib/justep");var Model = function(){var that = this;this.callParent();this.name = justep.Bind.observable("Justep wex5");this.editing = justep.Bind.observable(false);this.edit = function() {that.editing.set(true);};};return Model;
});
JS Code

这个效果也是比较常见的了,主要是用两个标签的来回切换实现,切换事件由click和hasfocus触发。

总结

基本的绑定用法就以上这些了,还有一些比如模板绑定和component绑定的内容就留到后续再介绍了。码字不易,顺手点赞哈~

【分享】html5 开发工具——WeX5中的各种绑定方式相关推荐

  1. 好程序员HTML5大前端分享常用开发工具大集合

    HTML5作为当前最为流行的编程语言,广为适用.语言的使用人数急剧增长,更多地开发人员使用这种语言来创建各种内容并放到互联网上.随着每一个新版本的发布,HTML通过更好的功能和技术渐渐占据了制高点.接 ...

  2. 简化工作流程,10款必备的HTML5开发工具

    利用HTML5工具不仅可以帮助设计师和开发者创建更具吸引力的网站,还能增加网站的可用性和可访问性.本文收集了10款HTML5开发工具为你节省更多开发时间. 利用HTML5工具不仅可以帮助设计师和开发者 ...

  3. 主流html5桌面应用开发,主流HTML5开发工具推荐

    HTML5开发工具推荐 HTML5被看做是web开发者创建流行web应用的利器,增加了对视频和Canvas 2D的支持.HTML5的诞生还让人们重新审视浏览器专用多媒体插件的未来,如Adobe的Fla ...

  4. html5 开发工具_前端HTML5开发工具有哪些呢?

    互联网时代的到来,HTML5前端开发作为搭建Web网站便捷有效的编程语言,越来越受到大众的认识和喜爱.而且,HTML5编程语言相对Java.C++等编程语言要简单易学,吸引了很多人想要加入HTML5的 ...

  5. 可以作为html5页面开发工具的有,HTML5开发工具有哪些

    HTML5开发工具有哪些 HTML5 发展越来越受到重视,随着各大浏览器对 HTML5 技术支持的不断完善以及 HTML5 技术的不断成熟,未来 HTML5 必将改变我们创建 Web 应用程序的方式. ...

  6. JAVA制作网页的软件有哪些,html5开发工具(开发html5网页的软件有哪些)

    html5开发工具 1.SublimeText SublimeText是一个跨渠道的代码编bai辑器,一起支持duWindows.Linux.MacOSX等操作系统,也是HTML和散文zhi先进的文本 ...

  7. 推荐几款HTML5开发工具

    推荐几款HTML5开发工具 开发工具 1. Adobe Dreamweaver 2. DevExtreme 3. JetBrains WebStorm 4. Visual Studio Code 5. ...

  8. HTML5开发工具有哪些?

    HTML5开发工具有哪些?下面就跟着一起来看看吧! 互联网时代的到来,HTML5前端开发作为搭建Web网站便捷有效的编程语言,越来越受到大众的认识和喜爱.而且,HTML5编程语言相对Java.C++等 ...

  9. 5个主流的HTML5开发工具

    HTML5被看做是web开发者创建流行web应用的利器,增加了对视频和Canvas 2D的支持.用HTML5的优点主要在于,这个技术可以进行跨平台的使用.比如你开发了一款HTML5的游戏,你可以很轻易 ...

最新文章

  1. 将编译器pass添加到Relay
  2. 目标10亿部?苹果AR眼镜有望明年登场!传搭载Mac级处理器、4K显示屏
  3. 电脑无法识别u盘怎么办_笔记本无法识别U盘了怎么办?这个端口你一定没开启!...
  4. Oracle weblogic线程Thread status分类和总结
  5. React Native之箭头函数和延展操作符(...)
  6. html绘制圆形和弧形的代码,通过HTML5 Canvas API绘制弧线和圆形的教程
  7. MFC(六)(对话框)
  8. 微信公众号的搭建-第五天-自定义菜单
  9. java 图形绘制_Java Graphics 图形绘制
  10. matlab7.0停止工作,matlab7.0闪退是怎么回事_matlab7.0闪退怎么办
  11. 2017中国人工智能峰会即将开启,和30位AI大咖一起头脑风暴
  12. 基于JAVA+SpringBoot+Mybatis+Vue+MYSQL的小区物业管理系统
  13. spring boot / cloud (九) 使用rabbitmq消息中间件
  14. SAP 下载CSV文件到本机(SAP_CONVERT_TO_TEX_FORMAT)(示例代码) <转载>
  15. 已解决-怎么关CSDN的一周小结
  16. 【DOSBox调整窗口大小】
  17. 金蝶旗舰版当期新增固定资产,当期就计提折旧
  18. 5G基础_06 降低时延技术
  19. Macbook 开机黑屏
  20. 微机原理_微处理器架构

热门文章

  1. PGET,一个简单、易用的并行调用框架
  2. php之——php输出内容的三种方式
  3. 整理一些不错的、网上好评的电影、电视、视频等资源地址
  4. 云运维拓扑图_浅谈:智慧交通云平台网络拓扑设计及架构设计
  5. 火车轨道铁路轨道检测识别(附带Python源码+详细解析)
  6. Python批量翻译英语单词(三十七)
  7. 数据压缩实验三:用c语言实现Huffman编码和压缩效率分析
  8. 无线警务移动办公系统解决方案
  9. P2331 [SCOI2005]最大子矩阵
  10. we learn考试能切屏吗_托福说 | 当留学生必备技能成托福口语真题,这题你能拿满分吗?!...