[Ext JS 4] 实战之 Picker 和 Picker Field
前言
所谓的picker , 就是弹出一个选择框,让你选择一些信息。比如选择日期, 选择颜色等;
选择的结果总是要放在一个地方的,Picker Field 就是用来放置选择结果的一个文本框。
在Ext js中综合起来使用的方式就是, 在 form 里添加一个picker 类型的 field, 这个field比较特殊的是有一个点击按钮, 点击之后可以弹出一个选择框, 在选择框里选中的值添入filed 中。
Ext JS 中的Picker
Ext JS 目前的版本有三种选择器
1. Date (Ext.picker.Date)
这个太常见的, 就是一个日期选择的窗口
2. Color (Ext.picker.Color)
颜色选择的窗口, 在office 中就经常看到
3. Time (Ext.picker.Time)
时间选择。 更通俗点说, 就是选择一天中的小时段。 选择的时间段是可以配置的。
简单的例子:
Ext.create('Ext.picker.Time', {
width: 60,
minValue: Ext.Date.parse('04:30:00 AM', 'h:i:s A'),
maxValue: Ext.Date.parse('08:00:00 AM', 'h:i:s A'),
renderTo: Ext.getBody()
});
这三个选择器的定义位于Ext.picker包下,都是从 Ext.Component继承过来(除了Time, 另外两个都是直接继承)。 这不难理解, 其实选择器只不过是Ext 中的一种组件而已。
Ext JS中的Picker Field
最常用的日期选择栏位 Ext.form.field.Date (xtype: datefield), 后面有个日期按钮, 点击后弹出一个日期选择器。
看一下它的类层次结构:
Ext.Component
Ext.form.field.Text 这是普通的form 输入框
Ext.form.field.Trigger - 从它开始就具有点击按钮的功能了。输入框最后可以显示一个按钮
Ext.form.field.Picker -- 这个比Trigger 功能更强大一些, 后面的实战开发的实例就会提到。(createPicker从这开始)
想一想机制, 其实很简单。对于picker 这种栏位, render 时多加一个按钮,点击按钮时会触发一个创建并显示选择器的事件。
实战开发
这是本篇的重点部分。
在开发中, 除了Ext JS 本身的日期和颜色选择之外, 有时候需要定制一些特殊的选择,比如说人员的选择.
思路其实很清新,
1. 需要从Ext.form.field.Trigger 或是从 Ext.form.field.Picker 继承一个新的class.
2. 需要从Ext.Component 继承一个选择器的窗口
区别就是从Trigger ?还是从Picker 继承?
这里的例子是在一个grid 中, 有一列的编辑时是要求人员选择的picker.
想法一:
从Trigger 继承, 改写onTriggerClick的内容。
onTriggerClick这里面就是创建一个组件并显示。
showUserSelWindow 这个方法需要传入当前this 的目的就是为了选中之后可以设置field的值。
Ext.define('Ext.ux.TextfieldUser', {
extend: 'Ext.form.field.Trigger',
alias: 'widget.textfielduser',
xtype: 'textfielduser',
triggerCls : 'user',
// override onTriggerClick
onTriggerClick: function() {
showUserSelWindow(this);
},
});
这种方式会出现的问题是:
在grid 中双击cell 变成编辑模式, 点击后面的按钮, 弹出选择的窗口, 这个时候发现后面的编辑的栏位又变成非编辑状态了。
这样的话,要设置选择后的值就很麻烦了,除非通过这个cell的id 找到这个cell , 设置它的html。 实在是太麻烦。
出现这个问题的原因是: 对与trigger 这种field , 失去焦点的话会触发blur 这个事件,而这个事件处理中就会改变编辑状态。
所以如果不需要回传值, 只是显示一些提示信息的话, 这个方式可以使用, 如果需要回传值, 就只能使用以下方式了。
想法二:
从Picker继承, 改写createPicker的内容。
Ext.define('Ext.ux.TextfieldUser', {
extend: 'Ext.form.field.Picker',
alias: 'widget.textfielduser',
xtype: 'textfielduser',
triggerCls : 'user',
// override onTriggerClick
createPicker: function() {
return showUserSelWindow(this);
}
});
从Picker继承的好处是它会保持在弹出选择窗口的同时, 原filed 保持编辑状态, 使用setValue 就可以完成值的设置。
唯一需要注意的地方就是:
默认产生的窗口的宽度跟field 的宽度是相同的。
所以需要的话, 可以设置选择窗口组件的 -minWidth
[Ext JS 4] 实战之 Picker 和 Picker Field的更多相关文章
- [Ext JS 4] 实战之 带week(星期)的日期选择控件(三)
前言 在 [Ext JS 4] 实战之 带week(星期)的日期选择控件(二) 的最后,有提到一个解决方案. 不过这方案有一个条件 ==> “2. 每年的周数从(1-52), 如果超过52 周 ...
- [Ext JS 4] 实战之 带week(星期)的日期选择控件
前言 Ext JS 3 和 Ext JS 4中都有提供日期选择的组件(当然早期版本也有). 但是有一些日期选择的需求是要看到星期,就是日期中的哪一天是这一年的第几周. 遗憾的是Ext js 并没有提供 ...
- [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
引言 贴一个grid 的例子先: 有这样一个需求: 1. 给 Grid(or Tree Grid)添加一列, 这一列显示是Button. 点击之后可以对这一行进行一些操作 2. 这一列每一行对应的按钮 ...
- [Ext JS 4] 实战之Grid, Tree Gird编辑Cell
前言 本篇这里以稍微复杂一点的Tree Grid 来介绍. 在写编辑grid 之, 先来看一下 grid 的 selType 的配置. 先给一个简单的Tree grid 的例子: Ext.onRead ...
- [Ext JS 4] 实战之多选下拉单 (带checkbox)
前言 Ext js 创建一个多选下拉单的方式很简单, 使用Ext.form.ComboBox, 设置 multiSelect 为true 就可以了. 但是如果要在每个下拉之前加上一个checkbox, ...
- [Ext JS 4] 实战Chart 协调控制(单一的坐标,两个坐标)
前言
- 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
转自:https://blog.csdn.net/oscar999/article/details/27176791
- [Ext JS 4]后台自动产生图档
前言 [Ext JS 4] 实战之将chart导出为png, jpg 格式的文件 承接上一篇, 我们可以做到在Browser端打开一个Chart,并导出为png或是jpg 等格式的图档. 但实际的需求 ...
- [Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab)
前言 [Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab) 在上一篇中,中间的tab 区块无法自动伸展的原因一句话说就是: 使用contentEL的方式,相关HTML元素不会参与组 ...
随机推荐
- [置顶] NS2中TCP拥塞控制仿真过程中盲点解析
最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...
- CSS之float属性解读
在web标准的网页中,页面各个元素都是以标准流的方式来进行布局的.即块元素占满指定的宽度,不指定宽度则占满整行(如<p>.<div>元素),内联元素则是在行内一个接一个的从左到 ...
- 上一篇括号配对让人联想起catalan数,顺便转载一篇归纳的还不错的文章
转载请注明来自souldak,微博:@evagle 怎么样才是合法的组合? 只要每一时刻保证左括号的数目>=右括号的数目即可. 直接递归就行,每次递归加一个括号,左括号只要还有就能加,右括号要保 ...
- WebService 之 WSDL文件 解说
恩,我想说的是,是不是常常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说依照上面的进行适配,嘿嘿,这个时候,要是你曾经没有开发过,肯定会傻眼,那假设 ...
- Filter和FilterChain具体的使用说明
一.Filter的介绍及使用 什么是过滤器? 与Servlet类似,过滤器是一些web应用程序组件,能够绑定到一个web应用程序中.可是与其它web应用程序组件不同的是,过滤器是"链&quo ...
- 进阶:案例五: Dynamic 创建 Business Graphic
效果图: step: 无需节点无需UI 1.添加属性 2.代码: method WDDOMODIFYVIEW . DATA:lr_graph TYPE REF TO cl_wd_business_gr ...
- Mac Eclipse+Maven+TestNg+ReportNg 生成测试报告
TestNG 是java 的单元测试框架,功能很强大,很方便,但是自动生成的测试报告有待改善,可以使用TestNg 自带的TestNG_xslt更改TestNG报告的样式,这里主要讲解ReportNg ...
- spring mvc controller json数据
项目中遇到个批处理,需要前台传递一个json格式对象数组,如下:var data={ "wos":[{"id":1,"satisfaction&q ...
- catalan 数——卡特兰数(转)
Catalan数——卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来后来查了下,原来是Catalan数.悲剧啊,现在整理一下 一.Catalan数的定义令h(1) ...
- 利用JS跨域做一个简单的页面訪问统计系统
事实上在大部分互联网web产品中,我们一般会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便能够在这些统计系统中看到自己站点页面详细的訪问情况.可是有些时候,因为一些特殊情况,我 ...