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 pager分页控件
Jan 04 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
Feb 27 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
javascript继承的六大模式小结
Apr 13 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
Dec 29 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
Vue.directive 自定义指令的问题小结
Mar 04 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
vue调用本地摄像头实现拍照功能
Aug 14 Javascript
Openlayers显示瓦片网格信息的方法
Sep 28 Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 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
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Python编写一个优美的下载器
2018/04/15 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
如何在pycharm中安装第三方包
2020/10/27 Python
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
个人找工作的自我评价
2013/10/17 职场文书
小学新学期教师寄语
2014/01/18 职场文书
实习生工作证明范本
2014/09/14 职场文书
重阳节标语大全
2014/10/07 职场文书
银行给客户的感谢信
2015/01/23 职场文书
委托书的样本
2015/01/28 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL