xmlplus组件设计系列之文本框(TextBox)(3)

发布时间 - 2026-01-11 00:56:42    点击率:

文本框是页面中最常用的输入组件,它的默认使用方式如下:

<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。这里有详尽的入门文档可供参考。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# xmlplus  # 文本框  # TextBox  # xmlplus组件设计系列之网格(DataGrid)(10)  # xmlplus组件设计系列之选项卡(Tabbar)(5)  # xmlplus组件设计系列之下拉刷新(PullRefresh)(6)  # xmlplus组件设计系列之路由(ViewStack)(7)  # xmlplus组件设计系列之分隔框(DividedBox)(8)  # xmlplus组件设计系列之树(Tree)(9)  # xmlplus组件设计系列之按钮(2)  # xmlplus组件设计系列之列表(4)  # xmlplus组件设计系列之图标(ICON)(1)  # 的是  # 浮点  # 为其  # 整型  # 文档  # 会有  # 好了  # 就像  # 但在  # 所需  # 三种  # 你对  # 请注意  # 可供  # 为例  # 时就  # 提供一个  # 这样子  # 这可 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Android仿QQ列表左滑删除操作  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel如何使用Sanctum进行API认证?(SPA实战)  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  JavaScript如何操作视频_媒体API怎么控制播放  如何用y主机助手快速搭建网站?  EditPlus中的正则表达式 实战(4)  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  香港服务器部署网站为何提示未备案?  Laravel如何创建自定义Artisan命令?(代码示例)  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何快速生成橙子建站落地页链接?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何安全更换建站之星模板并保留数据?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何快速查询网站的真实建站时间?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  用yum安装MySQLdb模块的步骤方法  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  详解Oracle修改字段类型方法总结  香港服务器网站卡顿?如何解决网络延迟与负载问题?  EditPlus中的正则表达式实战(6)  如何基于云服务器快速搭建网站及云盘系统?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  在centOS 7安装mysql 5.7的详细教程  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何获取免费开源的自助建站系统源码?  Laravel Session怎么存储_Laravel Session驱动配置详解  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  实例解析Array和String方法  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  JS经典正则表达式笔试题汇总  怎样使用JSON进行数据交换_它有什么限制  如何在阿里云虚拟主机上快速搭建个人网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel安装步骤详细教程_Laravel环境搭建指南