一个简单的ExtJS搜索建议框

封装的是一个Ext4.2的组件,继承并兼容于Ext的ComboBox.

实现原理非常easy,在 combo 中监听 keyup 事件就可以.

    搜索建议的Combo.基本上全然兼容, 使用方式与Combo下拉框一样.
    须要后台程序依据keyword进行搜索建议.

源代码例如以下:

// 搜索建议框,使用时请适当改动包名
Ext.define("CNC.view.SearchComboBox",{
    extend: "Ext.form.field.ComboBox",
    alias : ["widget.searchCombo", "widget.searchComboBox", ],
    editable: true,
    enableKeyEvents : true,
    searchWordKey : "keyword", // 搜索的属性名称
    searchSizeKey : "searchSize", // 传递数量的KEY
    searchSize : 5, // 返回的数量
    initComponent : function() {
        //
        var keyup = "keyup";
        this.addListener(keyup, this.keyupFn, this)
        this.callParent();
    }
    , keyupFn : function(combo, e){
        //
        var store = this.getStore && this.getStore();
        if(!store){  return; }
        //
        var proxy = store.getProxy();
        if(!proxy){ return; }
        // 获取输入的文本内容
        var text = this.getRawValue() || "";
        // 设置到參数里面
        var extraParams = proxy.extraParams || {};
        proxy.extraParams = extraParams;
        //
        var searchWordKey = this.searchWordKey;
        var searchSizeKey = this.searchSizeKey;
        var searchSize = this.searchSize || 5;
        // 设置到參数里面
        extraParams[searchWordKey] = text;
        extraParams[searchSizeKey] = searchSize;

        // 使用 store 载入
        store.load();
    }

});

组件使用配置:

    {
        xtype: ‘searchCombo‘,
        fieldLabel: ‘XXXX属性‘,
        name: ‘xxxxName‘,
        editable: true,
        displayField: ‘xxxName‘,
        valueField: ‘xxxID‘
        searchWordKey : "keyword", // 搜索的属性名称
        searchSizeKey : "searchSize", // 传递数量的KEY
        searchSize : 5, // 返回的数量
        store: Ext.create(‘XXX.xxx.xxxStore‘, {
            proxy : {
                type: ‘ajax‘,
                api : {
                    read : ‘xxx/xxx/listBy.json‘
                },
                actionMethods: {
                    read   : ‘POST‘
                },
                reader: {
                    type: ‘json‘,
                    root:‘data‘,
                    totalProperty: ‘totalCount‘,
                    messageProperty:‘message‘
                },
                extraParams: {
                    xxxname : ‘xxxvalue‘
                }
            }
        })
    }

Contoller 使用方式, 相似以下这样:

 var acType = "";
 var acTypeName = "";
 var acTypeCombo = XXXForm.query(‘searchCombo[name=acType]‘)[0];
 if(acTypeCombo){
	acType = acTypeCombo.getValue();
	acTypeName = acTypeCombo.getRawValue();
}

假设要监听事件,应该监听 select 事件:

 select(combo, records, eOpts )

欢迎留言。

说明: 仅仅支持远程载入的Store。

当然,也能够进行定制。如监听多个事件:

    initComponent : function() {
        //
        var keyup = "keypress";
        var change = "change";
        var active = "active";
        this.addListener(keyup, this.keyupFn, this)
        this.addListener(change, this.keyupFn, this)
        this.addListener(active, this.keyupFn, this)
        this.callParent();
    }

还能够对反复的文本进行拦截,避免过多请求:

        // 获取输入的文本内容
        var text = this.getRawValue() || "";
        text = text.trim();//.replace(/\w/g, "");
        if(text == this.prevKeyWord){
            return;
        }
        //
        this.prevKeyWord = text;

上面代码中凝视掉的部分, 是用正則表達式将数字字母给清理掉,有些中文输入法会有这样的问题。
此外,你还能够使用延迟函数,比方500毫秒之内仅仅触发一次。有些时候会非常实用的,这就须要你自己来实现啦。

时间: 2024-08-05 19:35:44

一个简单的ExtJS搜索建议框的相关文章

一个简单的汉字搜索匹配示例(支持拼音、首字母简写)

在社交应用中,很多场景下需要用到搜索,以微信的搜索通讯录为例.好友自己有昵称,我们可能给他/她备注一个昵称,在输入:拼间.首字母.原文时都应该能匹配到(匹配优先是备注然后才是原来的昵称).这里以'芈月传'为例,'芈'不是常见字,所以输入:myz或者miyuezhuan或者芈月传,都应该能匹配到'芈月传'这个结果.当然不一定需要全部写完,比如输入:my的时候就应该能匹配到'芈月传'了.针对多音字的话,可能会麻烦一些,不过也可以解决(在下面的例子之上再进行扩展即可),一般场景下单音已经解决90%以上

写一个简单的网站文件管理器-框选

为了这个框选,耗费了无数脑细胞,牺牲了n多的封装特性 源码(害人,下载请谨慎):https://files.cnblogs.com/files/allofalan/wnds-kuangxuan.rar 原文地址:https://www.cnblogs.com/allofalan/p/9949410.html

python实现一个简单的爬虫搜索功能

html.parser HTMLParser   urllib.request urlopen   urllib parse LinkParser(HTMLParser):     handle_starttag(, tag, attrs):         tag == :             (key, value) attrs:                 key == :                     newUrl = parse.urljoin(.baseUrl, v

bootstrap suggest搜索建议插件

近日因工作需要看了下此插件. 首先下载bootstrap js包.添加此插件的引用.注意css样式要引用,不能忘记. 前台页面代码,因为楼主做的是选项卡切换查询不同的结果. <tr> <th style="background: #fff;" width="30%">类型:</th> <td width="70%"> <select class="selectpicker show-

一个简单的记事本编辑框的实现以及搜集的一些窗口风格的预定义

这是一个简单的记事本的窗口过程 1 WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 2 3 LOCAL winRect:RECT 4 LOCAL editWidth:DWORD 5 LOCAL editHeight:DWORD 6 7 .IF uMsg==WM_DESTROY 8 invoke PostQuitMessage,NULL 9 .ELSEIF uMsg==WM_CREATE 10 ;创建一个编辑框 11

小练习:用jQuery简单模拟百度搜索框的提示功能

今天第一次接触jQuery,用jQuery模拟了一下百度搜索的自动提示功能.连带jQuery的基本知识点,简单总结如下: 首先得在工程中导入插件:jquery-1.4.2.js ,并在html的head中引入该js: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html>

java简单的实现搜索框的下拉显示相关搜索功能

最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索 先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来 搜索框相关搜索的展示很简单,就是根据你的搜索词,去数据库中匹配,是否有类似的搜索词存在,按照搜索词被搜索的次数进行排序显示出来 我设计的是每次搜索一个词,提交之后都会去数据库进行查询,看是否存在这个搜索词的搜索,若存在,则对数据库中的这个搜索词对象进行次数加1,不存在,则创建这个新搜索词对象,保存在

Spring cloud实战 从零开始一个简单搜索网站(一)

效果地址http://121.40.36.198:9080/web/ 本文从建站开始,就不跟别的顺序一样要怎么开始开始的,懂java就行 我会尽量讲的详细, 首先肯定是工具的选择 ,俗话说工欲善其事,必先利其器,Eclipse 和IDEA 都可以集成Spring 插件,不过最好还是用Spring Tool suite ,它有三个版本,看个人喜好,我比较偏向eclipse 安装完后 第一步 记得把maven 改成阿里云的 软件安装完后New - Spring start Project  然后填写

制作一个简单的文本框输入的网页

题目:制作一个简单的网页(包含一个文本框.一个按钮),在页面上输出用户在文本框输入的内容,要求用JavaScript获取文本框内容. 一.首先利用html在网页上制作表单,代码如下: **onclick事件:onclick 事件会在对象被点击时发生. 二.利用js获取输入信息,并将其输出: 相关知识: 1.给用户确认消息,真正实现交互,使用语句confirm();给用户提示信息,实现单向通信,使用语句alert(). 三.运行结果: 1.用浏览器打开结果如下: 2.输入文本框内容,点击[提交]: