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) ИЛИ (filterSelect), но если я не использую «логики» в переменный фильтр, фильтр будет «И».

Большое спасибо

редактирования: Существует jsFiddle близко к тому, что я хочу сделать, но с «И»: Example В этом примере фильтр: [{[Freight = 11,61 ИЛИ Freight = 51,30] } И {[City StartsWith "Шарлеруа"]}]

Но я хочу, чтобы иметь somethign как: [{[Freight = 11,61 ИЛИ Freight = 51,30]} ИЛИ {[City StartsWith "Шарлеруа"]}]

+0

я, наконец, получилось, я буду pu tmy код там через 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

Большое спасибо за это! –

Смежные вопросы