2012-05-11 7 views
18

Sto utilizzando Asp.net MVC3 e la libreria di knockoutjs. Ho bisogno di fare una validazione sul lato client. Sto esplorando il plugin di convalida a eliminazione diretta.Imposta un messaggio di errore personalizzato utilizzando le regole native del plugin di convalida a eliminazione diretta

Quindi dichiaro il seguente valore ko.observable nel mio codice js:

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

Questa è la mia opinione parte:

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

Quando l'utente immette un valore che non è un numero uno viene visualizzato un messaggio di errore: "Inserire un numero". Posso visualizzare un messaggio di errore diverso ma utilizzare comunque le regole native? Non voglio scrivere la logica di validazione personalizzata solo per questo. Qualsiasi aiuto con qualche esempio funzionante sarà molto apprezzato. Grazie!

risposta

33

Ecco il codice che crea gli estensori di convalida.

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

Come potete vedere tutte le cariche in grado di ricevere un oggetto params o di un oggetto letterale con i params e un messaggio personalizzato. Quindi nel tuo caso.

var numberValue = ko.observable().extend({ number: { 
    message: "some custom message", 
    params: true 
} }) 

Spero che questo aiuti.

+0

Proprio quello di cui avevo bisogno. Grazie mille! – Mdb

+0

Semplice e perfetto! – ariestav

+0

Quindi, aspetta - è possibile impostare ko.validation.rules.pattern.message ma non gli altri !? Ho appena provato con validation.rules.minLength e non ha funzionato: posso vedere il valore impostato sull'oggetto, ma poi usa solo il valore originale. –

33

si può semplicemente aggiungere proprietà validate come questo

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

yeap, funziona bene ed è molto meglio rispondi a quello qui sopra. Utilizzare le soluzioni fornite finchè è possibile – mikus

+0

Sostengo il tuo suggerimento con il contributo delle informazioni ufficiali: https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-Rules Nel primo paragrafo puoi leggere " var myObj = ko.observable(). extend ({richiesto: {params: true, message: 'Questo campo è obbligatorio.'}}); " – cesAR

0

Le risposte attuali sono corrette. Tuttavia, se si desidera modificare il messaggio per un validatore che già accetta altri parametri, è necessario avvolgere quei parametri esistenti in un nuovo oggetto denominato params.

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