11

関数を介してフィルター値を動的に更新できるようにしたいと思います。

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

そして機能:

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

しかし、datasource.read() を呼び出したときに関数が呼び出されていません。

これを達成するためのより良い方法はありますか?

または、これが最善の方法である場合、何が間違っていますか?

ありがとう!

4

3 に答える 3

12

DataSource にフィルターを設定 (更新) するための組み込み関数があります。これを確認してください。実際、なぜその機能が必要なのかわかりません。次のようにする方が簡単です。

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

datasourceつまり、元の条件に新しいフィルターを定義/適用します。これは、必要な条件です。

しかしもちろん、フィルターの実際の値を取得するために関数を使用することを妨げるものは何もなく、次のことができます。

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()
   }
});

および/または

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

ここでの例: http://jsfiddle.net/OnaBai/9gnsj/

于 2013-03-18T23:52:37.417 に答える
8

複数のフィールド値に基づいてフィルタリングする場合は、「and」演算子を使用するか、「or」演算子を使用できます。

今、私は 1 つの動的フィルターを作成しています。

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);
于 2014-04-11T05:49:31.457 に答える
0

これは私にとってはうまくいきました。どこにも文書化されていませんが、gridOptions.dataSource オブジェクトに _filter および _sort オブジェクトが表示されました。

        $http.get(templateUrl).success(function(result) {
            gridOptions.columns = result.columns;
            if (result.filter) {
                gridOptions.dataSource._filter = result.filter;
                gridOptions.dataSource._sort = result.sort;
            };
于 2016-03-09T12:26:08.257 に答える