2013-01-07 2 views
3

여러 조건이있는 데이터 소스에 대한 필터를 작성하려고합니다. 나는이 스레드 (HERE)가 거의 같은 문제가있는 곳을 찾았지만, 나는 두 가지 작업 사이에 OR이 아닌 AND를 만들고 싶습니다.Kendo DataSource 여러 조건의 필터링

코드는 내가 지금까지 가지고 있습니다 :

 var filter = { logic: "OR", filters: [] }; 

     var filterProduct = { logic: "AND", filters: [] }; 
     var supplierValue = dropdownSupplier.value(); 
     if (supplierValue != "00000000-0000-0000-0000-000000000000") { 
      filterProduct.filters.push({ field: "SupplierId", operator: "eq", value: supplierValue }); 
     } 

     var categoryValue = dropdownCategory.value(); 
     if (categoryValue != "00000000-0000-0000-0000-000000000000") { 
      filterProduct.filters.push({ field: "CategoryId", operator: "eq", value: categoryValue }); 
     } 

     var typeValue = dropdownType.value(); 
     if (typeValue != "00000000-0000-0000-0000-000000000000") { 
      filterProduct.filters.push({ field: "TypeId", operator: "eq", value: typeValue }); 
     } 


     var filterSelect = { logic: "OR", filters: [] }; 
     filterSelect.filters.push({ field: "Id", operator: "eq", value: "00000000-0000-0000-0000-000000000000" }); 

     filter.filters.push(filterProduct); 
     filter.filters.push(filterSelect); 

     dropdownProduct.dataSource.query({ filter: filter }); 
나는 그것이 가지고있어 수행 할 작업을 실제로

: (filterProduct를) OR (filterSelect)하지만 난에서 "논리"를 사용하지 않는 경우 가변 필터를 사용하면 필터는 "AND"가됩니다. Example이 예에서 필터는 다음과 같습니다 : 내가하고 싶은 것에 만은 "AND"와 jsFiddle 가까이가있다 :

감사

편집 많이 [{[화물 = 11.61 또는화물 = 51.30] 내가 갖고 싶어

그러나}과 {[도시 startswith "샤를 루아"]}] somethign 같은 : [{[화물 = 11.61 또는화물 = 51.30]} 또는 {[도시 startswith "샤를 루아"]}]

+0

내가 : (일을하는 여러 문서화되지 않은 방법으로이 있기 때문에) 검도 UI를 해독하려고 다른 사람들을 위해, 나는 두 개의 서로 다른 필드와 하나 개의 필드가 화합물 또는 필터가에 필터를 설정하는 내 예제를 포함했다 그것을 얻을 수있을 테니, 8 시간 안에 내가 tmy 코드를 푸틴 것이다.하지만 키워드 AND와 OR은 소문자 여야하고 변수 filterSelect를 사용할 필요가 없다. – forumma

답변

8

제대로 작동하는 최종 코드가 있습니다.

키워드가 AND 및 OR 소문자 할 필요가 내가 변수 filterSelect에게

var filter = { logic: "or", filters: [] }; 
    var filterProduct = { logic: "and", filters: [] }; 
    var supplierValue = dropdownSupplier.value(); 
    if (supplierValue != "00000000-0000-0000-0000-000000000000") { 
     filterProduct.filters.push({ field: "SupplierId", operator: "eq", value: supplierValue }); 
    } 
    var categoryValue = dropdownCategory.value(); 
    if (categoryValue != "00000000-0000-0000-0000-000000000000") { 
     filterProduct.filters.push({ field: "CategoryId", operator: "eq", value: categoryValue }); 
    } 
    var typeValue = dropdownType.value(); 
    if (typeValue != "00000000-0000-0000-0000-000000000000") { 
     filterProduct.filters.push({ field: "TypeId", operator: "eq", value: typeValue }); 
    } 
    if (filterProduct.filters.length > 0) { 
     filter.filters.push(filterProduct); 
    } 
    filter.filters.push({ field: "Id", operator: "eq", value: "00000000-0000-0000-0000-000000000000" }); 
    dropdownProduct.dataSource.query({ filter: filter }); 
6

감사 forumma를 사용할 필요가 없습니다, 당신의 예는 저를 도왔다. 마지막으로

var initialFilter = { logic: "or", filters: [] }; 
var filterStatus = [ 
    { field: "impStatus", operator: "neq", value: "Complete" } 
    ]; 
var filterDeveloper = { logic: "or", filters: [ 
     { field: "developer", operator: "eq", value: "Unassigned" } 
    ] }; 

filterDeveloper.filters.push({ field: "developer", operator: "eq", value: "Bob" }); 

initialFilter.filters.push(filterStatus); 
initialFilter.filters.push(filterDeveloper); 

dataSource.filter(initialFilter); 
+0

많은 감사를드립니다! –

관련 문제