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 相关文章推荐
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
Jquery easyui 下loaing效果示例代码
Aug 12 Javascript
js中的布尔运算符使用介绍
Nov 20 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
Node.js系列之连接DB的方法(3)
Aug 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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
python实现中文输出的两种方法
2015/05/09 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python os.listdir()乱码解决方案
2021/01/31 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
思想品德课教学反思
2014/02/10 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
我的长征观后感
2015/06/09 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL