2012-05-24 68 views
4

我有一個使用ext 3.4網格過濾器插件的可工作的可排序網格。我想默認活動列來過濾真正的值。需要非活動記錄的用戶可以刪除過濾器。我如何指定默認篩選器列和值?如何設置Ext Grid Filter默認值?

在此先感謝!

colModel: new Ext.grid.ColumnModel({ 
    defaults: { 
     sortable: true 
     // How do I specify a default filter value 
     // 
     // Only show active records unless the user changes the filter... 
    }, 
    columns: [{ 
     dataIndex:'f_uid', 
     id:'f_uid', 
     header:'ID', 
     hidden:true 
    }, { 
     dataIndex:'f_name', 
     id:'f_name', 
     header:'Name', 
    }, { 
     xtype:'booleancolumn', 
     dataIndex:'f_active', 
     id:'f_active', 
     header:'Active', 
     filterable:true, 
     trueText:'Active', 
     falseText:'Inactive' 
    }] 
+1

答案是在Filter.js源代碼。列定義中的過濾器對象可用於配置默認行爲。我不能回答。 – RandomSilo

+0

filter:{value:1,active:true} – RandomSilo

回答

3

答案在Filter.js源代碼中。列定義中的過濾器對象可用於配置默認行爲。

}, { 
     xtype:'booleancolumn', 
     dataIndex:'f_active', 
     id:'f_active', 
     header:'Active', 
     trueText:'Active', 
     falseText:'Inactive', 
     filterable:true, 
     filter: { 
      value:1, // 0 is false, 1 is true 
      active:true // turn on the filter 
     } 
} 
+4

我在上面編寫了一個過濾器,但是它在加載頁面時並不活躍。之後如果刷新網格,它將激活過濾器並顯示結果。你知道我是如何使第一次電網負載有效的嗎? – efirat

4

我意識到這是一個老問題,但我花了一段時間才能找到解決的辦法,所以我想我也有同感。

1)可以使用過濾器中的value屬性設置過濾器。

filter: { 
      type: 'LIST', 
      value: ['VALUE TO FILTER'] 
     } 

2)爲了最初篩選數據在商店使用filterBy()方法。這可以在onRender事件處理程序中定義。

this.getStore().load({ 
    scope:this, 
    callback: function() { 
     // filter the store 
     this.getStore().filterBy(function(record, id) { 
      // true will display the record, false will not 
      return record.data.DATA_TO_FILTER == 'VALUE TO FILTER '; 
     }); 
    } 
}); 
1

我也遇到同樣的問題,我發現@約翰的答案是正確的,我可以把它與樣品http://dev.sencha.com/deploy/ext-4.0.0/examples/grid-filtering/grid-filter-local.html工作,爲電網濾波器local.js,只需添加一樣的代碼:

grid.getStore().load({ 
    scope:this, 
    callback: function() { 
     // filter the store 
     grid.getStore().filterBy(function(record, id) { 
      // true will display the record, false will not 
      return record.data.size === 'small'; 
     }); 
    } 
}); 

原代碼store.load()之前,擦去該store.load()。 然後,它只會在網頁的第一次加載時顯示大小等於'small'的記錄。乾杯!

0

我做了一個通用幫助器類,允許您在列定義中設置任何默認值。 https://gist.github.com/Eccenux/ea7332159d5c54823ad7

這應該適用於遠程和靜態商店。請注意,這也適用於filterbar插件。

所以你的列項是一樣的東西:

{ 
    header: 'Filename', 
    dataIndex: 'fileName', 
    filter: { 
     type: 'string', 
     // filename that starts with current year 
     value: Ext.Date.format(new Date(), 'Y'), 
     active:true 
    } 
}, 

,然後在窗口組件時,只需添加類似:

initComponent: function() { 
    this.callParent(); 

    // apply default filters from grid to store 
    var grid = this.down('grid'); 
    var defaultFilters = Ext.create('Ext.ux.grid.DefaultFilters'); 
    defaultFilters.apply(grid); 
},