2013-01-07 86 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),但如果我不是在用「邏輯」可變過濾器,過濾器將是一個「與」。

非常感謝

編輯:有一個的jsfiddle接近我想要做的,但與「AND」:Example在這個例子中,過濾器是: [{[運費= 11.61或貨運= 51.30] }和{[市startswith 「沙勒羅瓦」]}]

但我想有somethign像: [{[運費= 11.61或貨運= 51.30]} {[市startswith 「沙勒羅瓦」]}]

+0

我終於得到它,我會在8小時內發佈代碼,當我能夠...但關鍵字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,你的榜樣幫助了我。對於其他人試圖破譯劍道UI(因爲有多個,無證的方式來做事),我已經包括了我的例子在兩個不同的領域,一個領域有化合物或過濾器設置過濾器:

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

非常感謝! –