xmlplus组件设计系列之文本框(TextBox)(3)


Posted in Javascript onMay 03, 2017

文本框是页面中最常用的输入组件,它的默认使用方式如下:

<input type='text'/>

当然,这里的 `type='text' 可以略去不写。大部分情况下,使用默认的文本框作为输入组件是没什么问题的,但在具体的项目中,难免会有功能扩展的需求。这里仅以如何增加文本框数据的格式化输入输出能力为例说明如何扩展原生的文本框组件。除了本章的内容,你也可以参考官方文档中的 参数映射 一章。

目标组件的功能分析

对于原生的文本框,我们获取到的值是文本类型的,就像下面的示例所展示的:

Example: {
  xml: "<input id='input' value='text'/>",
  fun: function (sys, items, opts) {
    console.log(typeof this.prop("value")); // string
  }
}

如果需要其它类型的数值,就需要对获取到的数据进行格式化操作。比如,如果需要整型数,就需要用到 parseInt 函数;如果需要浮点型数,就需要用到 parseFloat 函数。如果我们能够将格式化数据的操作封装起来,那使用起来一定会相当的方便。为了明确我们的预期,不妨先给出目标组件的使用示例。

Index: {
  xml: "<div id='index'>\
       <TextBox id='foo'/>\
       <TextBox id='bar' format='int'/>\
     </div>",
  fun: function (sys, items, opts) {
    items.foo.value = "hello, world";
    items.bar.value = 27.1828;
    console.log("foo", items.foo.value);
    console.log("bar", items.bar.value);
  }
}

此示例实例化了两个组件 Input。组件 Input 允许接收一个 format 参数作为其静态接口输入,并提供一个属性 value 作为其动态输入输出接口。format 参数有三种可能的值:string (默认)、int 以及 float。这三种值分别对应三种数据类型:字符串型、整型和浮点型。属性 value 根据 format 的值来进行格式化输入输出。示例的输出结果应该会是下面这样子:

hello, world
227

目标组件的实现

为了完成上面的目标组件,我们先给出一个文本框的组件框架。

TextBox: {
  xml: "<input id='input' type='text'/>",
  opt: { format: "string" },
  fun: function (sys, items, opts) {
    var parse = {"int": parseInt, "float": parseFloat, "string": String}[opts.format];
    function getValue() {
      // 这里需要获取 input 的值并根据 opts.format 值选择适当的格式化函数,
    }
    function setValue(value) {
      // 这里需要根据 opts.format 值选择适当的格式化函数,对 value 进行格式化后同去赋值
    }
    return Object.defineProperty({}, "value", { get: getValue, set: setValue });
  }
}

上面关键的地方在于格式化函数的选取,为了简单化,我们采用的是表查询方式。在组件初始化阶段该函数就已经准备就绪了,上述的 parse 函数即所需的格式化函数。不过需要注意的是,该组件的格式化函数类型在组件初始化时就固定了。如果需要可变的格式化函数,你需要对组件做些修正。好了,下面可以给出完整的的文本框组件了。

TextBox: {
  xml: "<input id='input' type='text'/>",
  opt: { format: 'string' },
  map: { attrs: { input: "disabled value placeholder readonly" } },
  fun: function (sys, items, opts) {
    var parse = {"int": parseInt, "float": parseFloat, "string": String}[opts.format];
    function getValue() {
      return parse(sys.input.prop("value"));
    }
    function setValue(value) {
      sys.input.prop("value", parse(value));
    }
    return Object.defineProperty({}, "value", { get: getValue, set: setValue });
  }
}

另外请注意,上面组件添加了部分属性映射的内容,这可以在具体的项目中根据需要进行增删。

本系列文章基于 xmlplus 框架。如果你对 xmlplus 没有多少了解,可以访问 www.xmlplus.cn。这里有详尽的入门文档可供参考。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
asp.net下利用js实现返回上一页的实现方法小集
Nov 24 Javascript
javascript实现面向对象类的功能书写技巧
Mar 07 Javascript
jquery keypress,keyup,onpropertychange键盘事件
Jun 25 Javascript
js URL参数的拼接方法比较
Feb 15 Javascript
js正则匹配出所有图片及图片地址src的方法
Jun 08 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
浅谈js中的this问题
Aug 31 Javascript
react-native 完整实现登录功能的示例代码
Sep 11 Javascript
详解vue axios用post提交的数据格式
Aug 07 Javascript
javascript实现前端input密码输入强度验证
Jun 24 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
May 03 #Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 #Javascript
javascript过滤数组重复元素的实现方法
May 03 #Javascript
JS实现图片点击后出现模态框效果
May 03 #Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 #Javascript
javascript 判断一个对象为数组的方法
May 03 #Javascript
深入理解node.js之path模块
May 03 #Javascript
You might like
PHP实现的简单缓存类
2015/07/29 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
用JS实现选项卡
2020/03/23 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
Python2随机数列生成器简单实例
2017/09/04 Python
Python快速排序算法实例分析
2017/11/29 Python
zookeeper python接口实例详解
2018/01/18 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
运动会开幕式解说词
2014/02/05 职场文书
无偿献血倡议书
2014/04/14 职场文书
人大调研汇报材料
2014/08/14 职场文书
南湾猴岛导游词
2015/02/09 职场文书
小学数学教学随笔
2015/08/14 职场文书
素质教育培训心得体会
2016/01/19 职场文书
nginx日志格式分析和修改
2022/04/28 Servers
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS