2012-05-11 10 views
18

Estoy usando la biblioteca Asp.net MVC3 y knockoutjs. Necesito hacer una validación del lado del cliente. Estoy explorando el complemento de validación knockout.Establezca un mensaje de error personalizado usando las reglas nativas del complemento de validación de eliminación directa

Así que declaran el siguiente valor ko.observable en mi código JS:

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

Este es mi punto de vista parte:

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

Cuando el usuario introduce un valor que no es un número de una aparece un mensaje de error: "Por favor ingrese un número". ¿Puedo mostrar un mensaje de error diferente pero seguir usando las reglas nativas? No quiero escribir una lógica de validación personalizada solo para esto. Cualquier ayuda con algún ejemplo de trabajo será muy apreciada. ¡Gracias!

Respuesta

33

Aquí está el código que crea los extensores de validación.

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

Como se puede ver todos los extensores puede recibir un objeto params o un objeto literal que los parametros y un mensaje personalizado. Entonces en tu caso.

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

Espero que esto ayude.

+0

Justo lo que necesitaba. ¡Muchas gracias! – Mdb

+0

¡Simple y perfecto! – ariestav

+0

Por lo tanto, espere - es posible establecer el ko.validation.rules.pattern.message pero no los otros !? Lo intenté con validation.rules.minLength y no funcionó. Puedo ver que se establece el valor en el objeto, pero luego solo usa el valor original. –

33

puede simplemente añadir una propiedad como esta validar

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

yeap, funciona bien y es mucho mejor responde entonces el de arriba Use las soluciones proporcionadas siempre que sea posible – mikus

+0

Apoyo su sugerencia con la contribución de la información oficial: https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-Rules En el primer párrafo, puede leer " var myObj = ko.observable(). extends ({required: {params: true, message: 'Este campo es obligatorio.'}}); " – cesAR

0

Las respuestas existentes son correctos. Sin embargo, si desea cambiar el mensaje para un validador que ya acepta otros parámetros, debe ajustar esos parámetros existentes en un nuevo objeto llamado params.

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