我不确定我的代码有什么问题。但是,在组合框上输入4个字符后,将显示所有值,而不是根据我键入的字符进行过滤。因为我的实时搜索被打破了。请参阅附图以获得更好的说明。
我在面板中创建了组合框作为项目之一
{
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
答案 0 :(得分:2)
您当前设置过滤的方式应该在服务器端处理。如果你将queryMode:'remote'更改为queryMode:'local',那么过滤器应该按照你想要的方式工作。
queryMode:'remote'告诉组合框使用您键入的值调用代理,服务器必须只返回匹配的值。如果您有一个庞大的搜索数据集
,这将非常有用答案 1 :(得分:1)
我发现了问题。当我们使用tpl&amp; Combobox上的displayTpl,livesearch功能无效
答案 2 :(得分:0)
在Combobox中使用自定义tpl
和displayTpl
时,您可以定义自定义过滤器功能,例如在按键上:
// Clear the filter collection without updating the UI
store.clearFilter(true);
store.filter([
{filterFn: function(item) { return item.get("identity_number") == "[....]" }}
]);
有关详细信息,请查看ExtJS documentation。