2016-04-16 18 views
0

私はKendoUIグリッド用のグループ化フィルタを作成しようとしています。グリッドを名前でフィルタリングするテキストフィールドと、単位でグリッドをフィルタする剣道の数値フィールドを作成する必要があります。KendoUIグループフィルタ

どのようにグループ化フィルタを作成できますか?

私は次のことを試してみましたが、それは働いていない - 不正な要求404エラー:

$('body').bind('keyup mouseup', '#UnitsInStock', function() { 
 
    var value = $('#UnitsInStock').val(); 
 
    var val = $('#ProductName').val(); 
 

 

 
    if (value) { 
 
    grid.data("kendoGrid").dataSource.filter(myFilters(val, value)); 
 
    } else { 
 
    grid.data("kendoGrid").dataSource.filter(); 
 
    } 
 

 
}); 
 

 
function myFilters(name='', price='') { 
 

 

 
    var filters = { 
 
    logic: "or", 
 
    filters: [ 
 
     { field: "ProductName", operator: "startswith", value: name}, 
 
     { field: "UnitsInStock", operator: "gte", value: price} 
 
    ]           
 

 

 
    } 
 
    return filters; 
 

 
}
<div id="grid"></div> 
 
    <script type="text/x-kendo-template" id="template"> 
 
     <div class="toolbar"> 
 
     <label for="category">Search by Product Name:</label> 
 
     <input type="search" id="ProductName" /> 
 
     <input id="UnitsInStock" type="number" /> 
 
    </div> 
 
    </script>

答えて

1

あなたは複数の種類の上で濾過するフィールドを持っているので、必ずタイプが時に保存されていることを確認フィルタオブジェクトを作成します。たとえば、あなたは、このような...

var filterFields = [{ field: "Units", type: "number" }, { field: "Name", type: "string" }] 

として、あなたのフィルタフィールドを事前に定義し、ユーザ入力

var searchString = // user input 

、最終的にはこの

var getFilter = function (filterFields, searchString) { 
     var filterInt = function (value) { 
      if (/^(\-|\+)?([0-9]+|Infinity)$/.test(value)) 
       return true; 
      return false; 
     } 

     var filters = []; 
     var i = 0; 
     for (var i = 0; i < filterFields.length; i++) { 
      if (filterFields[i].type === "string") { 
       filters.push({ 
        field: filterFields[i].field, 
        operator: "startswith", 
        value: searchString.toString() 
       }); 
      } 
      if (filterFields[i].type === "number") { 
       if (filterInt(searchString)) { 
        filters.push({ 
         field: filterFields[i].field, 
         operator: "gte", 
         value: parseInt(searchString) 
        }); 
       } 
      } 
     } 

     return { 
      logic: "or", 
      filters: filters 
     }; 
    } 

に似たフィルタを生成するための方法を得ることができます、グリッドをフィルタリングする

grid.data("kendoGrid").dataSource.filter(getFilter(filterFields, searchString)) 

また、エンドポイントが機能することを確認するには、郵便配達員などのツールを使用し、GET(http://............./Units?$filter=Id eq 1 and Name eq 'name')を実行します。

+0

ありがとうございます! –

関連する問題