2012-05-11 7 views
18

Ich benutze Asp.net MVC3 und knockoutjs-Bibliothek. Ich muss einige clientseitige Validierung durchführen. Ich erkunde das Knockout-Validierungs-Plugin.Legen Sie eine benutzerdefinierte Fehlermeldung mit den systemeigenen Regeln des Knockout-Validierungs-Plugins

So erkläre ich folgendes ko.observable Wert in meinem JS-Code:

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

Dies ist meiner Ansicht nach Teil:

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

Wenn der Benutzer einen Wert eingibt, der keine Zahl eine ist Fehlermeldung wird angezeigt: "Bitte geben Sie eine Nummer ein". Kann ich eine andere Fehlermeldung anzeigen, aber weiterhin die nativen Regeln verwenden? Ich möchte keine benutzerdefinierte Validierungslogik nur dafür schreiben. Jede Hilfe bei einigen Arbeitsbeispielen wird sehr geschätzt. Danke!

Antwort

33

Hier ist der Code, der die Validierung Extender erstellt.

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

Wie Sie alle Extender sehen kann, kann ein params Objekt oder ein Objekt erhalten wörtlichen mit den params und eine benutzerdefinierte Meldung. Also in deinem Fall.

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

Hoffe das hilft.

+0

Genau was ich brauchte. Vielen Dank! – Mdb

+0

Einfach und perfekt! – ariestav

+0

Warten Sie also - es ist möglich, die ko.validation.rules.pattern.message einzustellen, aber nicht die anderen !? Ich habe gerade versucht mit validation.rules.minLength und es hat nicht funktioniert - ich kann sehen, dass der Wert für das Objekt festgelegt ist, aber dann verwendet es nur den ursprünglichen Wert. –

33

Sie können nur Validate Eigenschaft wie dieser

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

yeap, funktioniert gut und es ist viel besser antworte dann auf den obigen. Verwenden Sie die bereitgestellten Lösungen, solange es möglich ist – mikus

+0

Ich unterstütze Ihren Vorschlag mit dem Beitrag der offiziellen Informationen: https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-Rules Im ersten Absatz können Sie lesen " var myObj = ko.observable(). extend ({erforderlich: {params: true, message: 'Dieses Feld ist erforderlich.}}); " – cesAR

0

Die vorhandenen Antworten sind richtig hinzuzufügen. Wenn Sie jedoch die Nachricht für einen Prüfer ändern möchten, der bereits andere Parameter akzeptiert, müssen Sie diese vorhandenen Parameter in ein neues Objekt namens params übernehmen.

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