2013-03-18 31 views
8

Tôi muốn để có thể cập nhật giá trị bộ lọc tự động thông qua một hàm:Thay đổi giá trị bộ lọc động cho nguồn dữ liệu kendo?

filter: [{ 
      "field": "id_person", 
      "operator": "eq", 
      "value": GetIdPerson() 
     }] 

Và chức năng:

function GetIdPerson() { 
    try{ 
     if (viewModel.get("SelectedMember").id_person > 0) { 
      return viewModel.get("SelectedMember").id_person; 
     } 
    } catch(ex) { } 
    return 0; 
} 

Nhưng chức năng không được gọi khi tôi gọi datasource.read ().

Có cách nào tốt hơn để thực hiện việc này không?

Hoặc nếu đây là cách tốt nhất, tôi đang làm gì sai?

Cảm ơn!

Trả lời

9

Có chức năng tích hợp để cài đặt (cập nhật) bộ lọc trong Nguồn dữ liệu, kiểm tra this. Vì vậy, thực sự tôi không biết tại sao bạn cần chức năng đó. Sẽ dễ dàng hơn khi thực hiện:

try{ 
    if (viewModel.get("SelectedMember").id_person > 0) { 
     datasource.filter({ 
      "field": "id_person", 
      "operator": "eq", 
      "value": viewModel.get("SelectedMember").id_person 
     }); 
    } 
} catch(ex) { } 

Ý tôi là, xác định/áp dụng bộ lọc mới cho datasource ban đầu, điều kiện nào là điều kiện bạn muốn.

NHƯNG tất nhiên không có gì ngăn cản bạn từ việc sử dụng một chức năng để nhận được giá trị thực tế của một bộ lọc và bạn có thể làm:

function GetIdPerson() { 
    try{ 
     if (viewModel.get("SelectedMember").id_person > 0) { 
      return viewModel.get("SelectedMember").id_person; 
     } 
    } catch(ex) { } 
    return 0; 
} 
var datasource = new kendo.data.DataSource({ 
    ... 
    schema : { 
     model : { 
      fields: { 
       ... 
      } 
     } 
    }, 
    filter: { 
     "field": "id_person", 
     "operator": "eq", 
     "value": GetIdPerson() 
    } 
}); 

và/hoặc

datasource.filter({ 
    "field": "id_person", 
    "operator": "eq", 
    "value": GetIdPerson() 
}); 

Một ví dụ ở đây: http://jsfiddle.net/OnaBai/9gnsj/

+0

Cảm ơn #OnaBai, nó hoạt động rất tốt! Nhưng tôi nghĩ nó gây ra vấn đề. Khi tôi viết lại bộ lọc: $ ("# GridAddress"). Data ("kendoGrid"). DataSource.filter ({ "trường": "id_person", "toán tử": "eq", "giá trị": GetIdPerson() }) nút TẠO trên thanh công cụ của lưới dừng hoạt động. Bất kỳ ý tưởng tại sao? – Naner

+1

Tìm thấy nó. Tôi đã thiếu serverFiltering: true. Cảm ơn một lần nữa. – Naner

6

Nếu bạn muốn lọc dựa trên nhiều hơn giá trị được gửi, bạn có thể sử dụng toán tử 'và' sử dụng khôn ngoan khác 'hoặc' thao tác hoặc là.

Bây giờ tôi đang tạo một bộ lọc động.

var filter = { logic: "and", filters: [] }; 
      for(var index=0; index < totalPages; index++){ 
       filter.filters.push({field: "name", operator: "eq", value: dynamic value here }); 
      } 
dataSource.filter(filter); 
0

Điều này phù hợp với tôi. Không được ghi lại ở bất cứ đâu, nhưng nhìn thấy các đối tượng _filter và _sort trong đối tượng gridOptions.dataSource, và nó đã làm việc tốt.

 $http.get(templateUrl).success(function(result) { 
      gridOptions.columns = result.columns; 
      if (result.filter) { 
       gridOptions.dataSource._filter = result.filter; 
       gridOptions.dataSource._sort = result.sort; 
      }; 
+0

{ "cột": [ { "lĩnh vực": "fieldOne", "title": "lĩnh vực One", "width": "200px" }, { "lĩnh vực": "fieldTwo" , "tiêu đề": "trường Hai số liên kết phải", "chiều rộng": "200px", "thuộc tính": {"style": "text-align: right;" }, "định dạng": "{0: 0.00} " }, ], " bộ lọc ": [ {" trường ":" fieldTwo "," toán tử ":" gt "," giá trị ": 100}, {" field ":" fieldOne ", "toán tử": "eq", "giá trị": null} ], "sắp xếp": [ {"trường": "fieldTwo", "dir": "desc"} ] } –

+0

ở trên là một json để sử dụng (trỏ tới nó bằng cách sử dụng templateUrl '/app/example/view1.json'. –

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