ux.form.field.SearchField 列表、树形菜单查询扩展
//支持bind绑定store
//列表搜索扩展,支持本地查询
//支持树形菜单本地一级菜单查询
Ext.define('ux.form.field.SearchField', {
extend: 'Ext.form.field.Text',
alias: 'widget.uxSearchfield',
defaultBindProperty: 'store',
mixins: ['Ext.util.StoreHolder'],
triggers: {
clear: {
weight: 0,
cls: Ext.baseCSSPrefix + 'form-clear-trigger',
hidden: true,
//清除搜索条件
handler: 'clearValue',
scope: 'this'
},
search: {
weight: 1,
cls: Ext.baseCSSPrefix + 'form-search-trigger',
//查询
handler: 'onSearchClick',
scope: 'this'
}
},
//查询参数
paramName: 'query',
//是否本地查询
isLocal: false,
initComponent: function () {
var me = this,
store = me.store;
me.on({
//添加监听,监听回车键
specialkey: function (f, e) {
if (e.getKey() == e.ENTER) {
me.onSearchClick();
}
},
//监听内容改变
//在这里监听是为了实现多个搜索控件绑定同一个store时
//界面能够同步
change: function (t, value) {
var clear = t.getTrigger('clear');
//根据查询条件是否存在,显示隐藏小按钮
if (value.length > 0) {
if (clear.hidden) {
clear.show();
t.updateLayout();
}
} else {
clear.hide();
t.updateLayout();
me.onClearClick();
}
}
});
//如果strong是string类型,寻找对应的store
if (Ext.isString(store)) {
store = me.store = Ext.data.StoreManager.lookup(store);
}
//动态绑定store
me.bindStore(store || 'ext-empty-store', true);
me.callParent(arguments);
},
//清除value
clearValue: function () {
this.setValue('');
},
//清除过滤
onClearClick: function () {
//console.log('清除过滤');
var me = this,
activeFilter = me.activeFilter;
if (activeFilter) {
me.store.getFilters().remove(activeFilter);
me.activeFilter = null;
} else {
me.store.clearFilter(false);
}
},
//本地过滤
localFilter: function (value) {
var store = this.store,
paramName = this.paramName; //first clear any current filters on the store. If there is a new value, then suppress the refresh event
store.clearFilter(!!value);
//check if a value is set first, as if it isnt we dont have to do anything
//the user could have entered spaces, so we must split them so we can loop through them all
var searches = value.split(','),
regexps = [],
i, regex; //loop them all
for (i = 0; i < searches.length; i++) {
//if it is nothing, continue
if (!searches[i]) continue; regex = searches[i].trim();
regex = regex.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); //if found, create a new regular expression which is case insenstive
regexps.push(new RegExp(regex.trim(), 'i'));
} //now filter the store by passing a method
//the passed method will be called for each record in the store
store.filter(function (record) {
//树形菜单只过滤第一层
if (record.get('depth') > 1) {
return true;
}
var matched = []; //loop through each of the regular expressions
for (i = 0; i < regexps.length; i++) {
var search = regexps[i],
didMatch = search.test(record.get(paramName)); //if it matched the first or last name, push it into the matches array
matched.push(didMatch);
} return (regexps.length && matched.indexOf(true) !== -1);
});
},
//过滤
onSearchClick: function () {
var me = this,
value = me.getValue(),
store,
proxy;
if (value.length > 0) {
//本地还是远程过滤
if (!me.isLocal) {
store = me.store;
store.setRemoteFilter(true);
// 设置代理,设置过滤参数
proxy = store.getProxy();
proxy.setFilterParam(me.paramName);
proxy.encodeFilters = function (filters) {
return filters[0].getValue();
}
// Param name is ignored here since we use custom encoding in the proxy.
// id is used by the Store to replace any previous filter
me.activeFilter = new Ext.util.Filter({
property: me.paramName,
value: value
});
me.store.getFilters().add(me.activeFilter);
} else {
me.localFilter(value);
}
}
},
onDestroy: function () {
//清除过滤条件
var me = this,
store = me.store;
if (store) {
me.onClearClick();
me.store = null;
//移除绑定
me.bindStore(null);
}
me.callParent();
}
});
简单示例
Ext.define('类名', {
extend: 'Ext.tree.Panel',
title: '小区',
rootVisible : false,
store: '数据源,可bind绑定',
header: {
items: [{
//本地查询
isLocal:true,
xtype: 'uxSearchfield',
//
store: '数据源,可bind绑定',
//
paramName: '查询字段',
emptyText: '请输入关键词'
}]
}
});
ux.form.field.SearchField 列表、树形菜单查询扩展的更多相关文章
- ux.form.field.KindEditor 所见所得编辑器
注意需要引入KindEditor相关资源 //所见所得编辑器 Ext.define('ux.form.field.KindEditor', { extend: 'Ext.form.field.Text ...
- ux.form.field.Verify 验证码控件
//验证码控件 Ext.define('ux.form.field.Verify', { extend: 'Ext.container.Container', alias: ['widget.fiel ...
- ux.form.field.TreePicker 扩展,修复火狐不能展开bug
/** * A Picker field that contains a tree panel on its popup, enabling selection of tree nodes. * 动态 ...
- ux.form.field.Year 只能选年的时间扩展
效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...
- ux.form.field.Month 只能选年、月的时间扩展
效果如图,亲测6.2.1版本可用,用法同时间选择控件 //月弹窗扩展 //只选月 Ext.define('ux.picker.Month', { extend: 'Ext.picker.Month', ...
- ux.form.field.Password 密码与非密码状态切换
效果如图: 扩展源码: //扩展 //密码按钮扩展 //支持在密码与非密码之间切换 Ext.define('ux.form.field.Password', { extend: 'Ext.form.f ...
- ux.form.field.GridDate 支持快速选择日期的日期控件
效果如图,亲测6.2.1版本可用 /** *支持快速选择日期的日期控件 */ Ext.define('ux.form.field.GridDate', { extend: 'Ext.form.fiel ...
- 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理
在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...
- 如何快速开发树形列表和分页查询整合的WInform程序界面
我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进 ...
随机推荐
- Kindle 转换器
一款比较好用的Kindle转换器,支持txt, opf, htm, html, epub 到 mobi 的转换,支持拖放操作,支持批量操作.只需要选中多个待转换的文件,拖放到程序窗口即可. 曾经用过一 ...
- SharePoint 2013 Service 状态无法启动,显示“启动中(Starting)”
Problem 在SharePoint 2013 Central Administration中启动 SharePoint Service(也称为:Service Machine Instance)时 ...
- Qt 5.3.1 版本应用程序的发布问题
问题描述:用过Qt的朋友,都知道,完成的Qt程序,只能在QT环境里运行.在debug环境里,没有配置环境路线的情况下,必须包含多个dll库,然而每个dll库的大小确实很大的.但有时候还是会失败的,在一 ...
- paip.函数式编程方法概述以及总结
paip.函数式编程方法概述以及总结 1 函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1 起源 (图灵机,Lisp机器, 神经网络计算机) 1.2 函 ...
- bzoj 1858: [Scoi2010]序列操作
1858: [Scoi2010]序列操作 Time Limit: 10 Sec Memory Limit: 64 MB 线段树,对于每个区间需要分别维护左右和中间的1和0连续个数,并在op=4时特殊 ...
- 使用retrofit注意
retrofit-1.7.1 依赖以下包 okhttp-2.0.0 okio-1.0.0 okhttp-urlconnection-2.0.0 ExtCertPathValidatorExceptio ...
- 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?
最近研究虚拟化技术,不可避免遇到一个问题:如何评估物理主机上虚拟主机的容量?下面这篇文章的思路有一定的启发性,转发一下. 如何确定一个CPU核上部署的虚拟机数量? 摘要:本文说明一个CPU核上部署虚拟 ...
- CentOS6.5下安装Open vSwitch
准备 # yum install openssl-devel redhat-rpm-config kernel-devel -y #yum install kvm libvirt python-vir ...
- IOC性能对比
- ubuntu 16.04 有道词典
依赖环境 sudo apt install \ python3-pyqt5 \ python3-requests \ python3-xlib \ python3-pil \ tesseract-oc ...