ExtJs疑难杂症之ComboBox选项filter问题
作者:GDNPC 日期:2009-05-12
如果有多个同类型的ComboBox,个人觉得最好的加载方法是加载一个store,然后通过filter方法筛选出需要的选择项,这样切换ComboBox就不用请求单独的store了。但这里似乎又有点问题。
版本:2.2
症状:
如以下代码所示,store执行filter后ComboBox的选项并不会改变,但打印store.getCount()时发现选项数目已经发生变化,只是ComboBox没展示出来。
Java代码
- var comboBoxFilter = new Ext.form.ComboBox({
- store: basekeyStore,
- displayField: "basekeyName",
- valueField: "basekeyID",
- typeAhead: true,
- mode: 'local',
- forceSelection: true,
- triggerAction: 'all',
- selectOnFocus:true,
- lazyRender:true
- });
- basekeyStore.filter("basekeyTypdID", "3");//使用filter
根据官方解释:ComboBox有内建的filter方法,因此会冲掉你设在store上的filter。
解决办法:在store执行完filter后,先把原来snapshot保存起来,然后再把filter出来的结果覆盖原来的snapshot。还原时把原来的snapshot还原回来,然后再clearfilter。
代码如下:
先写两个function用于filter的增删,实现思想如上所述。
JavaScript代码
- function clearBasekeyStoreFilter(){//清除filter函数
- basekeyStore.snapshot = basekeyStore.realSnapshot;
- delete basekeyStore.realSnapshot;
- basekeyStore.clearFilter();
- }
- function createBasekeyStoreFilter(typeid){//创建filter函数
- basekeyStore.filter('basekeyTypeID', typeid);
- basekeyStore.realSnapshot = basekeyStore.snapshot;
- basekeyStore.snapshot = basekeyStore.data;
- }
ComboBox正常绑定即可,但需要找时机创建和删除filter,我选择在expand和collapse事件中处理。
Java代码
- var comboBoxFilter = new Ext.form.ComboBox({
- store: basekeyStore,
- displayField: "basekeyName",
- valueField: "basekeyID",
- typeAhead: true,
- mode: 'local',
- forceSelection: true,
- triggerAction: 'all',
- selectOnFocus:true,
- lazyRender:true
- });
- comboBoxFilter.on('expand',
- function(){
- createBasekeyStoreFilter('3');//ComboBox展开时提供filter条件执行filter
- }
- );
- comboBoxFilter.on('collapse', function(){
- clearBasekeyStoreFilter();//ComboBox收拢时清理filter。
- }
- );
[本日志由 GDNPC 于 2009-05-12 09:55 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: extjs javascript 技术 js
相关日志:
文章来自: 本站原创
Tags: extjs javascript 技术 js
相关日志:
评论: 1 | 引用: 0 | 查看次数: 1816
回复
]感谢楼主。
发表评论
上一篇
下一篇



