2011-11-03 50 views
6

Để lọc một cột lưới chúng ta có thể sử dụng:Làm cách nào để lọc nhiều cột lưới extjs?

{ 
    xtype: 'button', 
    text:'Search', 
    handler:function(){ 

     store.clearFilter(); 
     var searchValue = Ext.getCmp("textFieldId").getValue(); 
     store.load().filter('GridFieldName', searchValue); 

    }     
} 

nhưng làm thế nào để tìm kiếm nhiều lĩnh vực cùng một lúc, một cái gì đó như:

{ 
    xtype: 'button', 
    text:'Search', 
    handler:function(){ 

     store.clearFilter(); 
     var searchValue = Ext.getCmp("textFieldId").getValue(); 
     store.filter([ 
      {property: "GridFieldName", value: searchValue}, 
      {property: "GridFieldName1", value: searchValue} 
     ]); 
    }     

} 

bất kỳ ý tưởng?

EDIT:

Điều kỳ lạ là, trong cả hai trường hợp, chỉ tìm kiếm duy nhất hoạt động:

này hoạt động:

store.filter([ 
     { property: "FirstName", value: searchValue } 
]); 

và các công trình này:

var FirstNameFilter = new Ext.util.Filter({ 
    property: "FirstName", value: searchValue 
}); 

store.filter(FirstNameFilter); 

nhưng điều này không:

store.filter([ 
     { property: "FirstName", value: searchValue }, 
     { property: "LastName", value: searchValue } 
]); 

hoặc thực hiện điều này:

var filters = [ 
    new Ext.util.Filter({ 
      property: "FirstName", value: searchValue 
    }), 
    new Ext.util.Filter({ 
      property: "LastName", value: searchValue 
    }) 
]; 
store.filter(filters); 

Trả lời

8

Cố gắng tạo ra các trường hợp Ext.util.Filter như thế này:

var filters = [ 
new Ext.util.Filter({ 
    property: "GridFieldName", value: searchValue 
}), 
new Ext.util.Filter({ 
    property: "GridFieldName1", value: searchValue 
}) 
]; 
store.filter(filters); 

Ngoài ra, bạn có thể tạo bộ lọc duy nhất với logic tùy chỉnh:

var filters = [ 
    new Ext.util.Filter({ 
     filterFn: function(item){ 
     return item.get('GridFieldName') == searchValue && item.get('GridFieldName1') == searchValue; 
     } 
    }) 
]; 
store.filter(filters); 
+0

Tôi đã chỉnh sửa câu hỏi, bất kỳ ý tưởng nào? –

+0

OP không chỉ đề cập rằng điều này không hoạt động nhưng tôi đang sử dụng 3.2 (bị buộc phải) và Ext.util.Filter không tồn tại. Bất kỳ đề xuất? –

+0

hello bộ lọc mã này kiểm tra cả hai trường nếu cả hai có sẵn sau đó và sau đó trả lại kết quả –

2

Điều đó sẽ làm việc. Không phải nó? Khi tôi hiểu nó nếu bạn áp dụng các bộ lọc như bạn đã hiển thị, nó sẽ lọc theo cả hai tiêu chí.

store.filter([ 
    {property: "GridFieldName", value: searchValue}, 
    {property: "GridFieldName1", value: searchValue} 
]); 

Thay vào đó, bạn sẽ có thể sử dụng hàm setFilter để thêm bộ lọc mới.

store.setFilter("GridFieldName", searchValue) 
store.setFilter("GridFieldName1", searchValue) 

Nếu bạn sử dụng setFilter không có đối số, bạn chỉ nên áp dụng lại bộ lọc bạn đã xác định trước đó. Chúng chỉ bị xóa nếu bạn gọi clearFilter.

+0

Bộ lọc, tên hoặc Họ là ai? – svenlol

+0

tốt, không có gì nếu bạn đặt cả hai bộ lọc, chỉ hoạt động với một bộ lọc, tôi cần cho phép nói, lọc toàn bộ json cho searchValue, vì vậy tôi cần nhiều bộ lọc trên nhiều cột? –

8

tôi thấy bài này trong khi tìm kiếm một cách để lọc trên nhiều cột (thực sự là TẤT CẢ các cột) với logic HOẶC. (Vì vậy tìm kiếm khoản phù hợp với cột A HAY phù hợp với cột B vv) Tôi đã kết thúc lọc với một filterfunction tùy chỉnh như:

... 
var regex = RegExp('Insert searchclause here', 'i'); 
store.filter(new Ext.util.Filter({ 
    filterFn: function (object) { 
     var match = false; 
     Ext.Object.each(object.data, function (property, value) { 
      match = match || regex.test(String(value)); 
     }); 
     return match; 
     } 
})); 

HTH

4
store.clearFilter(); 
    var searchValue = Ext.getCmp("textFieldId").getValue(); 
    if (!!searchValue) { 
     var filters = [ 
      new Ext.util.Filter({ 
       filterFn: function (item) { 
        return item.get('FirstName').toLowerCase().indexOf(searchValue.toLowerCase()) > -1         
         || item.get('LastName').toLowerCase().indexOf(searchValue.toLowerCase()) > -1; 
       } 
      }) 
     ]; 
     store.filter(filters); 
    } 

Đây là mã của tôi mà áp dụng từ Pavel.
Đối với công việc của tôi tìm kiếm Nhiều cột, Không phân biệt chữ hoa chữ thường, Bỏ qua vị trí theo OR logic.

Hy vọng trợ giúp này.

Các vấn đề liên quan