//支持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 列表、树形菜单查询扩展的更多相关文章

  1. ux.form.field.KindEditor 所见所得编辑器

    注意需要引入KindEditor相关资源 //所见所得编辑器 Ext.define('ux.form.field.KindEditor', { extend: 'Ext.form.field.Text ...

  2. ux.form.field.Verify 验证码控件

    //验证码控件 Ext.define('ux.form.field.Verify', { extend: 'Ext.container.Container', alias: ['widget.fiel ...

  3. ux.form.field.TreePicker 扩展,修复火狐不能展开bug

    /** * A Picker field that contains a tree panel on its popup, enabling selection of tree nodes. * 动态 ...

  4. ux.form.field.Year 只能选年的时间扩展

    效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...

  5. ux.form.field.Month 只能选年、月的时间扩展

    效果如图,亲测6.2.1版本可用,用法同时间选择控件 //月弹窗扩展 //只选月 Ext.define('ux.picker.Month', { extend: 'Ext.picker.Month', ...

  6. ux.form.field.Password 密码与非密码状态切换

    效果如图: 扩展源码: //扩展 //密码按钮扩展 //支持在密码与非密码之间切换 Ext.define('ux.form.field.Password', { extend: 'Ext.form.f ...

  7. ux.form.field.GridDate 支持快速选择日期的日期控件

    效果如图,亲测6.2.1版本可用 /** *支持快速选择日期的日期控件 */ Ext.define('ux.form.field.GridDate', { extend: 'Ext.form.fiel ...

  8. 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理

    在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...

  9. 如何快速开发树形列表和分页查询整合的WInform程序界面

    我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进 ...

随机推荐

  1. 团队项目--站立会议DAY5

    第五次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:继续对钟灵毓秀和赵莹同学编写的代码进行进一步审核及辅助. 2.钟灵毓秀:继续完善相关功能代码,逐步整理出各 ...

  2. 学习WPF——了解WPF中的XAML

    XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<Button>映射为WPF的Butt ...

  3. DDD基本概念

    一条箴言是:如果值对象是可共享的,那么它们应该是不可变的.值对象应该保持很小.很简单 极力推荐将值对象实现为不可变的.它们由一个构造器创建,并且在它们的生命周期内永远不会被修改.当你想要得到这个对象的 ...

  4. jenkins插件 查看job下次运行时间

    文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd jenkins插件next executions( ...

  5. MySQL数据库主键设计原则

    目录 1. 主键定义... 5 2. 主键设计原则... 5 2.1 确保主键的无意义性... 5 2.2 采用整型主键... 5 2.3 减少主键的变动... 5 2.4 避免重复使用主键... 6 ...

  6. 阿里云服务器PPTP VPN安装记录

    # sudo apt-get install pptpd   http://blog.kunyu.li/digitalocean-ubuntu-vps-vpn.html     iptables管理 ...

  7. Beta分布和Dirichlet分布

    在<Gamma函数是如何被发现的?>里证明了\begin{align*} B(m, n) = \int_0^1 x^{m-1} (1-x)^{n-1} \text{d} x = \frac ...

  8. js从一个函数中结束另一个函数的问题

    等待通过事件监听结束另一函数的方法出炉…… 1.事件监听? 2.从a里把b函数全局定义一下,不推荐. function a(){ alert("a"); b=function(){ ...

  9. atitit.web的动态include 跟变量传递 java .net php

    atitit.web的动态include 跟变量传递 java .net php 1. 动态include  <jsp:include 1 2. 使用QueryString 1 3. 使用Ses ...

  10. MVC 添加 httpHandlers 支持 .aspx 页面访问

    <?xml version="1.0"?> <!-- For more information on how to configure your ASP.NET ...