[关闭]
@king- 2014-12-04T15:01:20.000000Z 字数 1400 阅读 1313

ExtJs 4.x 过滤器的使用

Extjs javascrip


在使用store的时候,我们有时会遇到这样的问题,根据查询过来的的数据存在store中,但是在查询后的store里面却存在部分我不需要的(这样的数据不能通过条件请求后台接口处理),这个时候我们就必须想方设法的去除我们不需要的这些数据,这样,ExtJs 4 中的过滤器就起到了至关重要的角色了。

在使用过滤器的时候有很多种方法:

  1. 将过滤器写在store中
  1. model: 'MDM.model.AppStore',
  2. pageSize: 10,
  3. proxy: {
  4. type: 'ajax',
  5. url: '/justsy/appPackage/search',
  6. reader: {
  7. type: 'json',
  8. root: 'content',
  9. totalProperty: 'totalConunt',
  10. successProperty: 'success'
  11. },
  12. startParam: 'pageStart',
  13. limitParam: 'pageSize'
  14. },
  15. filters: [
  16. function(record) {
  17. if(record.data.packageType == "3" || record.data.packageType == "4"){
  18. return true;
  19. }else{
  20. return false;
  21. }
  22. }
  23. ]
  1. 如果使用的时候公共的store,这个时候你可以选择不直接引用公共store,而是自己在需要store的地方重新声明即可,model可以使用同一个
    直接在需要的地方new出store:
  1. store : new Ext.data.Store({})
  2. //先在view中new出store在引用当前的这个store
  3. var stores = Ext.create('Ext.data.Store', {
  4. model: 'MDM.model.AppStore',
  5. pageSize: 10,
  6. proxy: {
  7. type: 'ajax',
  8. url: '/justsy/appPackage/search',
  9. reader: {
  10. type: 'json',
  11. root: 'content',
  12. totalProperty: 'totalCount',
  13. successProperty: 'success'
  14. },
  15. startParam: 'pageStart',
  16. limitParam: 'pagesSize'
  17. },
  18. filters: [
  19. function(record) {
  20. if(record.data.packageType == "3" || record.data.packageType == "4"){
  21. return true;
  22. }else{
  23. return false;
  24. }
  25. }
  26. ]
  27. })
  1. 如果不想new一个store,但是又需要使用过滤器的时候,我们可以选择在组件的beforequery或者beforerenderer事件中获取组件的store对当前组件的store进行过滤处理(但是这里必须强调,过滤器应该在获取到数据,也就是store.items.length>0之后页面显示之前进行使用)
  1. 'beforquery' : function(e){
  2. var combo = e.combo;
  3. var val = e.query;
  4. combo.store.filterBy(function(record, id){
  5. return record.data.type == "PkgType";
  6. });
  7. combo.expand();
  8. return false;
  9. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注