2012-05-11 14 views
18

Używam biblioteki Asp.net MVC3 i knockoutjs. Potrzebuję wykonać sprawdzanie poprawności strony klienta. Eksploruję wtyczkę do sprawdzania poprawności nokautu.Ustaw niestandardowy komunikat o błędzie za pomocą natywnych reguł wtyczki sprawdzania poprawności nokautu

więc zadeklarować następującą wartość ko.observable w moim kodu JS:

var numberValue = ko.observable().extend({ number: true }) 

Jest to moim zdaniem część:

<input data-bind = "value: numberValue " /> 

Gdy użytkownik wprowadzi pewną wartość, która nie jest liczbą pojawi się komunikat o błędzie: "Wprowadź numer". Czy mogę wyświetlić inny komunikat o błędzie, ale nadal korzystam z natywnych reguł? Nie chcę pisać niestandardowej logiki walidacji właśnie w tym celu. Każda pomoc z pewnym przykładem pracy zostanie bardzo doceniona. Dziękuję Ci!

Odpowiedz

33

Oto kod, który tworzy przedłużacze sprawdzania poprawności.

addExtender: function (ruleName) { 
    ko.extenders[ruleName] = function (observable, params) { 
     //params can come in a few flavors 
     // 1. Just the params to be passed to the validator 
     // 2. An object containing the Message to be used and the Params to pass to the validator 
     // 
     // Example: 
     // var test = ko.observable(3).extend({ 
     //  max: { 
     //   message: 'This special field has a Max of {0}', 
     //   params: 2 
     //  } 
     // )}; 
     // 
     if (params.message) { //if it has a message object, then its an object literal to use 
      return ko.validation.addRule(observable, { 
       rule: ruleName, 
       message: params.message, 
       params: params.params || true 
      }); 
     } else { 
      return ko.validation.addRule(observable, { 
       rule: ruleName, 
       params: params 
      }); 
     } 
    }; 
}, 

Jak widać, wszystkie przedłużacze mogą odbierać obiekty params lub literały obiektowe z parametrami i niestandardową wiadomością. W twoim przypadku.

Mam nadzieję, że to pomoże.

+0

Właśnie tego potrzebowałem. Dziękuję Ci bardzo! – Mdb

+0

Prosty i doskonały! – ariestav

+0

Tak, czekaj - możliwe jest ustawienie pliku ko.validation.rules.pattern.message, ale nie innych !? Próbowałem tylko z validation.rules.minLength i nie działało - widzę wartość ustawianą na obiekcie, ale potem po prostu używa oryginalnej wartości. –

33

można po prostu dodać właściwość sprawdzania poprawności jak ten

emailAddress: ko.observable().extend({ // custom message 
     required: { message: 'Please supply your email address.' } 
    }), 
+4

yeap, działa dobrze i jest znacznie lepiej odpowiedz na to pytanie powyżej. Używaj dostarczonych rozwiązań, o ile jest to możliwe – mikus

+0

Popieram Twoją sugestię przy udziale oficjalnych informacji: https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-Rules W pierwszym akapicie możesz przeczytać " var myObj = ko.observable(). extend ({required: {params: true, message: 'To pole jest wymagane.'}}); " – cesAR

0

Istniejące odpowiedzi są poprawne. Jeśli jednak chcesz zmienić komunikat dla walidatora, który już akceptuje inne parametry, musisz zawinąć te istniejące parametry w nowy obiekt o nazwie params.

ko.observable().extend({ 
    unique: { 
     params: { 
      collection: foo, 
      valueAccessor: function(item) { 
       return item.bar(); 
      } 
     }, 
     message: 'some custom message' 
    } 
} 
Powiązane problemy