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 相关文章推荐
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 Javascript
客户端js性能优化小技巧整理
Nov 05 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
BootStrap与Select2使用小结
Feb 17 Javascript
bootstrap table表格客户端分页实例
Aug 07 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 Javascript
JS如何生成随机验证码
Mar 02 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写杨辉三角实例代码
2011/07/17 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
Python的标准模块包json详解
2017/03/13 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
大专生自我鉴定范文
2013/10/01 职场文书
财务副总经理工作职责
2013/11/25 职场文书
师范生个人推荐信
2013/11/29 职场文书
合作协议书范本
2014/04/17 职场文书
作风大整顿心得体会
2014/09/10 职场文书
老公保证书
2015/01/17 职场文书
计算机专业自荐信
2015/03/05 职场文书
Redis主从复制操作和配置详情
2022/09/23 Redis