2013-11-04 26 views
8

Tôi đang sử dụng ExtJS 4.1. Tôi đang sử dụng cửa hàng clearFilter() để xóa bộ lọc khỏi cửa hàng. Tôi đang áp dụng bộ lọc cho cửa hàng bằng cách sử dụng phương thức filterBy. Tôi lọc tất cả các hồ sơ mà tên không phải là Ronaldo.Cách nhanh nhất để xóa bộ lọc khỏi ExtJs lưu trữ khi bộ lọc được áp dụng bằng cách sử dụng filterBy()

Sau khi xóa bộ lọc, tôi tải chế độ xem có chứa lưới (được đính kèm vào cửa hàng). Nhưng khi tôi tải lưới, tôi vẫn có thể thấy bộ lọc đó không bị xóa. Cửa hàng là cửa hàng địa phương. Tôi chưa áp dụng bất kỳ nhóm nào trên cửa hàng. Cửa hàng chỉ sử dụng một mô hình.

myStore.filterBy(function (record) { 
    if (record.get('Name') != 'Ronaldo') { 
     return true; 
    } 
}); 

Trong khi tất cả điều này đang làm việc tốt, nhưng khi tôi xóa bộ lọc bằng cách sử dụng clearFilter(), nó được tham gia một thời gian. Có cách nào nhanh hơn \ tốt hơn \ chính xác để xóa bộ lọc trên một cửa hàng khi bộ lọc được áp dụng bằng cách sử dụng filterBy()?

+1

Khi bạn nói "nó" đang tiến hành một thời gian, những gì là "nó"? Cửa hàng? Lưới/dataview? Bạn có lọc từ xa hoặc cục bộ không? Bạn đã áp dụng nhóm? Bạn có ức chế sự kiện trên clearFilter()? Và có bao nhiêu trường hợp mô hình trong cửa hàng của bạn? Tất cả hoặc một số hoặc không có vấn đề nào trong số này có thể quan trọng đối với vấn đề của bạn, nhưng không biết thêm chi tiết thì rất khó để đề xuất bất cứ điều gì, vì clearFilter() phải là một quá trình rất nhanh (kiểm tra nguồn: http: //docs.sencha. com/extjs/4.2.1/source/Store.html # Ext-data-Store-method-clearFilter) – existdissolve

Trả lời

11

Khi bạn sử dụng clearFilter(), nó không tạo sự khác biệt nếu bạn sử dụng filterBy() hoặc filter() hoặc các bộ lọc được định cấu hình trên cửa hàng.

Đây là những gì xảy ra khi bạn xóa các bộ lọc:

  1. bộ sưu tập các bộ lọc trên các cửa hàng sẽ bị xóa
  2. dữ liệu đã lọc được thay thế bằng bản gốc (không lọc) dữ liệu được lưu trữ trong một bản chụp
  3. các "datachanged" và "làm mới" sự kiện được bắn vào các cửa hàng

lưu ý rằng bạn có thể ngăn chặn các sự kiện được bắn bằng cách sử dụng clearFilter(true) whi ch có thể hữu ích nếu bạn muốn lọc lại cửa hàng sau khi xóa các bộ lọc hiện có.

Nếu xóa bộ lọc của cửa hàng thực hiện chậm sau đó nó có thể có liên quan đến quá trình bố trí (trên mạng lưới của bạn hoặc bất cứ điều gì bạn đang sử dụng các cửa hàng với) được kích hoạt bởi bước 3.

Cũng tham khảo các docs hoặc source code.

+0

Tìm nạp dữ liệu mới (chưa được lọc) cũng mất một khoảng thời gian, nếu bạn có 'remoteFilter = true'. –

+0

Liên kết không hoạt động. – Hari

+0

@Hari Tôi đã sửa chữa các liên kết, nhờ gợi ý – matt

0

Chỉ cần gọi một:

myStore.reload(); 

bất cứ khi nào bạn muốn loại bỏ một bộ lọc sử dụng filterBy.

+0

Nhưng điều đó sẽ tải lại cửa hàng, điều này thực sự không cần thiết khi bạn chỉ muốn xóa bộ lọc cục bộ. – MarthyM

3

heres câu trả lời hết sức mình, để xóa các chức năng filterBy:

myStore.filterBy(function (record) { 
       return true; 
     }); 

tôi chỉ cần sao nó, hy vọng giúp nó

+0

Đây có thể là giải pháp dễ nhất cho vấn đề. Tôi có một cửa hàng lọc từ xa được sử dụng trong combobox, nhưng tôi muốn lọc nó cục bộ khi người dùng gõ một cái gì đó trong đầu vào, vì vậy tôi cũng đang sử dụng phương thức 'store.filterBy()'. Nếu tôi sử dụng phương thức 'clearFilter()', các bộ lọc từ xa của tôi sẽ bị mất. – MarthyM

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