码迷,mamicode.com
首页 > Web开发 > 详细

一个简单的ExtJS搜索建议框

时间:2015-08-21 13:33:20      阅读:454      评论:0      收藏:0      [点我收藏+]

标签:extjs   搜索建议   搜索提示   下拉框   combo   

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

实现原理很简单,在 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。


版权声明:本文为博主原创文章,未经博主允许不得转载。

一个简单的ExtJS搜索建议框

标签:extjs   搜索建议   搜索提示   下拉框   combo   

原文地址:http://blog.csdn.net/renfufei/article/details/47832931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!