Google
Loading...

ExtJs疑难杂症之ComboBox选项filter问题

如果有多个同类型的ComboBox,个人觉得最好的加载方法是加载一个store,然后通过filter方法筛选出需要的选择项,这样切换ComboBox就不用请求单独的store了。但这里似乎又有点问题。

版本:2.2

症状:

如以下代码所示,store执行filter后ComboBox的选项并不会改变,但打印store.getCount()时发现选项数目已经发生变化,只是ComboBox没展示出来。

Java代码
  1. var comboBoxFilter = new Ext.form.ComboBox({   
  2.         store: basekeyStore,   
  3.         displayField: "basekeyName",   
  4.         valueField: "basekeyID",   
  5.         typeAhead: true,   
  6.         mode: 'local',   
  7.         forceSelection: true,   
  8.         triggerAction: 'all',   
  9.         selectOnFocus:true,   
  10.         lazyRender:true  
  11.     });   
  12.   
  13. basekeyStore.filter("basekeyTypdID""3");//使用filter  

根据官方解释:ComboBox有内建的filter方法,因此会冲掉你设在store上的filter。

解决办法:在store执行完filter后,先把原来snapshot保存起来,然后再把filter出来的结果覆盖原来的snapshot。还原时把原来的snapshot还原回来,然后再clearfilter。

代码如下:

先写两个function用于filter的增删,实现思想如上所述。

JavaScript代码
  1. function clearBasekeyStoreFilter(){//清除filter函数   
  2.         basekeyStore.snapshot = basekeyStore.realSnapshot;   
  3.         delete basekeyStore.realSnapshot;   
  4.         basekeyStore.clearFilter();   
  5.     }   
  6.        
  7. function createBasekeyStoreFilter(typeid){//创建filter函数   
  8.         basekeyStore.filter('basekeyTypeID', typeid);   
  9.         basekeyStore.realSnapshot = basekeyStore.snapshot;   
  10.         basekeyStore.snapshot = basekeyStore.data;   
  11.     }  

ComboBox正常绑定即可,但需要找时机创建和删除filter,我选择在expand和collapse事件中处理。

 

Java代码
  1. var comboBoxFilter = new Ext.form.ComboBox({   
  2.         store: basekeyStore,   
  3.        displayField: "basekeyName",   
  4.        valueField: "basekeyID",   
  5.        typeAhead: true,   
  6.        mode: 'local',   
  7.        forceSelection: true,   
  8.        triggerAction: 'all',   
  9.        selectOnFocus:true,   
  10.        lazyRender:true  
  11. });   
  12.        
  13. comboBoxFilter.on('expand',    
  14.     function(){   
  15.         createBasekeyStoreFilter('3');//ComboBox展开时提供filter条件执行filter   
  16.     }   
  17. );   
  18.        
  19. comboBoxFilter.on('collapse', function(){   
  20.         clearBasekeyStoreFilter();//ComboBox收拢时清理filter。   
  21.     }   
  22. );  


[本日志由 GDNPC 于 2009-05-12 09:55 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: extjs javascript 技术 js
相关日志:

评论: 1 | 引用: 0 | 查看次数: 1536
  • 1
止水 [2009-10-27 07:28 PM]
感谢楼主。
  • 1
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: ?
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭