Verwenden MVC 4 mit KnockoutJS. Kann ich eine unauffällige Validierung mit einer benutzerdefinierten Knockout-Bindung binden? Ich verbinde die Validierung derzeit mit einer Vorlage mit afterRender
. Ich würde es gerne mit der Bindung automatisch hinzugefügt haben. Gefällt mir:Binden Sie unauffällige Validierung mit benutzerdefinierten KnockoutJS Bindung
ko.bindingHandlers.egtZipRep = {
init: function (element, valueAccessor, allBindingsAccessor, context) {
$(element).inputmask("99999", { "placeholder": " " });
egtUniqueNameBinding(element, ++ko.bindingHandlers['uniqueName'].currentIndex);
applyValidationRules(element); // Is it possible to do this here?
ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, context);
}
};
Ich habe den ganzen Tag damit herumgebastelt. Ich kann es nicht tun, ohne extrem ineffizient zu sein.
Die Art, wie ich es derzeit mache, ist unten. Vielleicht sollte ich einfach glücklich damit sein. Aber ich schätze Leute haben das schon mal probiert.
self.ReferenceAfterRender = function (element) {
bindUnobtrusiveValidation(element);
}
// Bind validation on new content
function bindUnobtrusiveValidation(element) {
// Bind to fields - must be called everytime new field is created
$.validator.unobtrusive.parseDynamicContent(element);
}
$.validator.unobtrusive.parseDynamicContent = function (selector) {
// Use the normal unobstrusive.parse method
$.validator.unobtrusive.parse(selector);
// Get the relevant form
var form = $(selector).first().closest('form');
// Get the collections of unobstrusive validators, and jquery validators
// and compare the two
var unobtrusiveValidation = form.data('unobtrusiveValidation');
var validator = form.validate();
if (typeof (unobtrusiveValidation) != "undefined") {
$.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
if (validator.settings.rules[elname] === undefined) {
var args = {};
$.extend(args, elrules);
args.messages = unobtrusiveValidation.options.messages[elname];
$('[name=' + elname + ']').rules("add", args);
} else {
$.each(elrules, function (rulename, data) {
if (validator.settings.rules[elname][rulename] === undefined) {
var args = {};
args[rulename] = data;
args.messages = unobtrusiveValidation.options.messages[elname][rulename];
$('[name=' + elname + ']').rules("add", args);
}
});
}
});
}
Ich hatte damit zu tun, denke ich, vielleicht kann ich ausgraben, wie ich das angegangen bin. – kamranicus
In Ordnung, ich musste nie benutzerdefinierte Validierungsbindungen erstellen, wir verwendeten die Attribute von MVC, um die Validierungsattribute auszugeben, und verwendeten auch die Hilfsmethode 'parseDynamicContent' bei AJAX-Aufrufen. Schau durch jquery.unobtrusive.js und ich bin sicher, es gibt eine Methode, die Sie aufrufen können, um die Regeln dynamisch hinzuzufügen. – kamranicus