2011-04-07 36 views

回答

5

下MyFilter在例如替換該環......

for (var columnId in columnFilters) { 
    if (columnId !== undefined && columnFilters[columnId] !== "") { 
     var c = grid.getColumns()[grid.getColumnIndex(columnId)]; 
     if (item[c.field] != columnFilters[columnId]) { 
      return false; 
     } 
    } 
} 

與此..

for (var columnId in columnFilters) { 
    if (columnId !== undefined && columnFilters[columnId] !== "") { 
     var c = grid.getColumns()[grid.getColumnIndex(columnId)]; 
     if (item[c.field].indexOf(columnFilters[columnId]) == -1) { 
      return false; 
     } 
    } 
} 

現在看來如此明顯:)

0

這裏是CoffeeScript的代碼我使用達致這:

filterGrid = (item) -> 
    return true unless hasFilter 
    grid.setSelectedRows([]) 
    columns = grid.getColumns() 
    for columnId, filter of columnFilters 
     if filter? 
      column = columns[grid.getColumnIndex(columnId)] 
      field = item[column.field] 
      return false unless (field? && field.toLowerCase().indexOf(filter.toLowerCase()) > -1) 
    return true 

grid.setSelectedRows([])應用濾波器之前剛剛清除任何選定的行。如果您不這樣做,那麼您在屏幕上看到的選定行與底層選定行不匹配。

更重要的是return true unless hasFilter行禁止在網格加載時進行任何過濾工作,除非用戶實際上已經鍵入到其中一個框中。我發現這在通過http批量加載JSON數據加載大型數據集時對網格的性能產生了很大的影響。

這裏是輸入框處理程序設置hasFilter標誌:

$(grid.getHeaderRow()).delegate(':input', 'change keyup', (e) -> 
    columnId = $(this).data('columnId') 
    if columnId? 
     columnFilters[columnId] = $.trim($(this).val()) 
     hasFilter = true 
     dataView.refresh() 
) 
相關問題