2012-10-26 20 views
10

Używam sprawdzania poprawności Knockout do sprawdzania poprawności pola w tablicy. Zostanie wyświetlony komunikat o błędzie, ale nie można uzyskać funkcji isValid() lub ko.validation.group(). Potrzebuję jednego z nich, aby obsłużyć zgłoszenie.Sprawdzanie poprawności Knockout na tablicy

errors = ko.validation.group(contactList(), {deep:true}); 

Oto skrzypce: http://jsfiddle.net/mduey/hEJWJ/80/

Dzięki!

+0

Wygląda na to, że nokaut ma problem ze sposobem, w jaki obiekty są dodawane do tablicy. Jeśli obiekty są tworzone w definicji tablicy i usuwane z metody ładowania, działa zgodnie z oczekiwaniami. –

Odpowiedz

3

Problem polega na tym, że sprawdzanie poprawności nie jest uruchamiane po dodaniu nowych elementów tablicy do urządzenia observableArray. Here is quick an dirty solution which can be optimized further.

Za każdym razem, gdy dodajesz nowy element do swojego modelu observableArray, uruchamiam sprawdzanie poprawności, umieszczając wyniki w obserwowalnym, aby można było poprawnie śledzić je za pomocą powiązań widoku. Można go jeszcze poprawić przy ustawieniu throttle, więc sprawdzanie poprawności nie będzie uruchamiane dla każdego wypychania do tablicy (rzeczywiste dla cykli). Jak widzę, obecnie ko.validation.group nie zwraca właściwej widoczności, więc musiałem stworzyć dla niego opakowanie.

5

Miałem ten sam problem i można go rozwiązać, ustawiając obserwowalną właściwość config na wartość false. Wywołuje to głęboką walidację za każdym razem, gdy wywoływana jest funkcja błędów:

ko.validation.init({ 
     grouping: { 
      deep: true, 
      observable: false //important ! Needed so object trees are correctly traversed every time so added objects AFTER the initial setup get included 
     }, 
     insertMessages: true, 
     messagesOnModified: true, 
     debug: false 
    }); 
Powiązane problemy