2012-05-11 13 views
18

Asp.net MVC3 ve knockoutjs kütüphanesini kullanıyorum. Bazı istemci tarafı doğrulaması yapmalıyım. Nakavt doğrulama eklentisini araştırıyorum.Nakavt doğrulama eklentisinin yerel kurallarını kullanarak özel bir hata iletisi ayarlayın

Yani benim js kodunda aşağıdaki ko.observable değerini beyan: kullanıcı bir sayı değil bazı değer girdiğinde

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

:

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

Bu benim bakış parçasıdır hata mesajı görüntülenir: "Lütfen bir sayı giriniz". Farklı bir hata mesajı görüntüleyebilir, ancak yerel kuralları hala kullanabilir miyim? Bunun için özel doğrulama mantığı yazmak istemiyorum. Bazı örnek çalışmalarla ilgili herhangi bir yardım büyük ölçüde takdir edilecektir. Teşekkür ederim!

cevap

33

Doğrulama genişleticileri oluşturan kod İşte.

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

bir params nesne veya params ve özel bir mesaj ile değişmez bir nesne alabilir tüm genişleticiler Görüldüğü gibi. Yani senin durumunda.

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

Bu yardımcı olur umarım.

+0

Tam ihtiyacım olan şey. Çok teşekkür ederim! – Mdb

+0

Basit ve mükemmel! – ariestav

+0

Yani, bekle - ko.validation.rules.pattern.message değerini ayarlamak mümkündür, ancak diğerlerini değil !? Ben sadece validation.rules.minLength ile çalıştım ve işe yaramadı - Nesnede ayarlanan değeri görebiliyorum, ancak o zaman sadece orijinal değeri kullanıyor. –

33

sadece mevcut yanıtlarınız doğru bu

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

yeap, iyi çalışıyor ve çok daha iyi Cevap o zaman yukarıdaki. Mümkün olduğu sürece sağlanan çözümleri kullanın – mikus

+0

Resmi bilginin katkısıyla önerinizi destekliyorum: https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-Rules İlk paragrafta okuyabilirsiniz " var myObj = ko.observable() uzantısı ({required: {params: true, message: 'Bu alan gereklidir.}}}); " – cesAR

0

gibi validate özelliğini ekleyebilir. Ancak, başka parametreleri kabul eden bir doğrulayıcı için iletiyi değiştirmek isterseniz, bu mevcut parametreleri params adlı yeni bir nesneye sarmanız gerekir.

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