实时搜索组合框不工作ExtJS 4.2.1

时间:2014-02-07 14:37:33

标签: extjs extjs4 extjs4.2

我不确定我的代码有什么问题。但是,在组合框上输入4个字符后,将显示所有值,而不是根据我键入的字符进行过滤。因为我的实时搜索被打破了。请参阅附图以获得更好的说明。

Illustration Image

我在面板中创建了组合框作为项目之一

    {
        xtype: 'combobox',
        fieldLabel: 'Guest Name',
        padding: '10px 10px 20px 10px',
        allowBlank: false,
        id: 'guest_id_payment',
        name: 'guest_id',
        // Template for the dropdown menu.
        // Note the use of "x-boundlist-item" class,
        // this is required to make the items selectable.
        tpl: Ext.create('Ext.XTemplate',
            '<tpl for=".">',
                '<div class="x-boundlist-item">{identity_number} - {name}</div>',
            '</tpl>'
        ),
        // template for the content inside text field
        displayTpl: Ext.create('Ext.XTemplate',
            '<tpl for=".">',
                '{identity_number} - {name}',
            '</tpl>'
        ),
        valueField: 'identity_number',
        store: 'SGuest',
        height: 20,
        queryMode: 'remote'
    }

这是商店:

Ext.define('ghb.store.SGuest', {
extend: 'Ext.data.Store',
model: 'ghb.model.MGuest',
autoLoad: true,
autoSync: true,

proxy: {
    pageParam: false,
    startParam: false,
    limitParam: false, 

    type: 'ajax',
    api: {
        create: '/ghb_manager/add_guest',
        read: '/ghb_manager/data_guest',
        update: '/ghb_manager/edit_guest',
        destroy: '/ghb_manager/delete_guest'
    },
    reader: {
        type: 'json',
        root: 'data'
    },
    writer: {
        type: 'json',
        encode: true,
        writeAllFields: true,
        root: 'data'
    },
    root: 'data'
}
});

我还添加了更改事件监听器

       '#guest_id_payment':{
            change: this.changeGuestCombo
        },

这是更改事件侦听器的功能,加载另一个存储(不是ComboBox的存储)

changeGuestCombo: function(self, newValue, oldValue, eOpts){
    var store = Ext.getStore('SReservation');
    store.load({
        params: {
            data: self.getValue(),
        }
    });
},

N.B。我正在使用4.2.1

3 个答案:

答案 0 :(得分:2)

您当前设置过滤的方式应该在服务器端处理。如果你将queryMode:'remote'更改为queryMode:'local',那么过滤器应该按照你想要的方式工作。

queryMode:'remote'告诉组合框使用您键入的值调用代理,服务器必须只返回匹配的值。如果您有一个庞大的搜索数据集

,这将非常有用

答案 1 :(得分:1)

我发现了问题。当我们使用tpl&amp; Combobox上的displayTpl,livesearch功能无效

答案 2 :(得分:0)

在Combobox中使用自定义tpldisplayTpl时,您可以定义自定义过滤器功能,例如在按键上:

// Clear the filter collection without updating the UI
store.clearFilter(true);

store.filter([
    {filterFn: function(item) { return item.get("identity_number") == "[....]" }}
]);

有关详细信息,请查看ExtJS documentation