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 相关文章推荐
使用jQuery内容过滤选择器选择元素实例讲解
Apr 18 Javascript
jquery动态添加元素事件失效问题解决方法
May 23 Javascript
JavaScript简单下拉菜单特效
Sep 13 Javascript
实例详解display:none与visible:hidden的区别
Mar 30 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
Mar 13 Javascript
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
详解使用Next.js构建服务端渲染应用
Jul 10 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
Jquery cookie插件实现原理代码解析
Aug 04 jQuery
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
CURL状态码列表(详细)
2013/06/27 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
2014年圣诞节促销方案
2014/03/14 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
优秀团队申报材料
2014/12/26 职场文书
董事长新年致辞
2015/07/29 职场文书