2013-03-18 14 views
8

chciałabym móc zaktualizować wartość filtra dynamicznie przez funkcję:Dynamicznie zmieniaj wartość filtru dla źródła danych kendo?

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

a funkcja:

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

ale funkcja nie jest wywoływana, gdy zadzwonię datasource.read ().

Czy istnieje lepszy sposób na osiągnięcie tego?

A jeśli to jest najlepszy sposób, co robię źle?

Dzięki!

Odpowiedz

9

Istnieje wbudowana funkcja do ustawiania (aktualizowania) filtru w źródle danych, sprawdź this. Więc właściwie nie wiem, dlaczego potrzebujesz tej funkcji. Byłoby łatwiej robi:

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

Znaczy, zdefiniować/zastosować nowy filtr do pierwotnego datasource które warunkują to ten, który chcesz.

ALE oczywiście nic uniemożliwia korzystanie z funkcji dla uzyskania rzeczywistej wartości filtra i można zrobić:

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

i/lub

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

Przykładem tutaj: http://jsfiddle.net/OnaBai/9gnsj/

+0

Dzięki #OnaBai, zadziałało świetnie! Ale myślę, że to spowodowało problem. Po przepisaniu filtru: $ ("# GridAddress") .danych ("kendoGrid"). DataSource.filter ({ "pole": "id_person", "operator": "eq", "wartość": GetIdPerson() }) przycisk CREATE na pasku narzędzi siatki przestaje działać. Każdy pomysł, dlaczego? – Naner

+1

Znaleziono. Brakowało mi opcji serverFiltering: true. Dzięki jeszcze raz. – Naner

6

Jeśli chcesz filtrować w oparciu o więcej niż wartość wpisu, możesz użyć operatora "i" w innym celu "lub" operat " lub.

Teraz tworzę jeden filtr dynamiczny.

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); 
0

To zadziałało dla mnie. Nigdzie nie udokumentowano, ale zobaczyłem obiekty _filter i _sort w obiekcie gridOptions.dataSource i hej, że to zadziałało.

 $http.get(templateUrl).success(function(result) { 
      gridOptions.columns = result.columns; 
      if (result.filter) { 
       gridOptions.dataSource._filter = result.filter; 
       gridOptions.dataSource._sort = result.sort; 
      }; 
+0

{ "kolumny": [ { "pola": "fieldOne" "Nazwa": "jedno pole" "szerokość" "200px" } { "pola": "fieldTwo" , "title": "pole Dwie wyrównane do prawej", "width": "200px", "attributes": {"style": "text-align: right;" }, "format": "{0: 0.00} " }, ], " filtr ": [ {" pole ":" pole 2 "," operator ":" gt "," wartość ": 100}, {" pole ":" poleOne ", "podmiot": "eq", "wartość": zerowy} ] "rodzaj": [ { "pola": "fieldTwo", "dir" "desc"} ] } –

+0

powyżej JSON plik do użycia (wskaż go za pomocą szablonuUrl "/app/example/view1.json". –

Powiązane problemy