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 相关文章推荐
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
js 使用form表单select类实现级联菜单效果
Dec 19 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
Jan 09 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
Feb 16 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
Feb 27 Javascript
原生js实现密码输入框值的显示隐藏
Jul 17 Javascript
使用javaScript实现鼠标拖拽事件
Apr 03 Javascript
在vue项目中,将juery设置为全局变量的方法
Sep 25 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
关于尾递归的使用详解
2013/05/02 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
推荐dojo学习笔记
2007/03/24 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python循环语句之break与continue的用法
2015/10/14 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Django 解决由save方法引发的错误
2020/05/21 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
计算机专业学生的自我评价
2013/12/15 职场文书
淘宝活动策划方案
2014/02/06 职场文书
行政部岗位职责范本
2014/03/13 职场文书
个人承诺书怎么写
2014/05/24 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
行政司机岗位职责
2015/04/10 职场文书
导游词之任弼时故居
2020/01/07 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫