Sử dụng MVC 4 với KnockoutJS. Tôi có thể ràng buộc xác nhận không phô trương với một ràng buộc loại trực tiếp tùy chỉnh? Tôi hiện đang rebinding việc xác nhận bằng cách sử dụng một mẫu với afterRender
. Tôi rất thích có nó tự động thêm vào với các ràng buộc. Như thế này:Ràng buộc xác thực không phô trương với ràng buộc KnockoutJS tùy chỉnh
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);
}
};
Tôi đã bận rộn với nó cả ngày. Tôi không thể làm điều đó mà không vô cùng hiệu quả.
Cách tôi hiện làm, bên dưới. Có lẽ tôi chỉ nên hạnh phúc với nó. Nhưng tôi đoán mọi người đã thử điều này trước đây.
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);
}
});
}
});
}
Tôi đã phải đối phó với điều này tôi nghĩ, có lẽ tôi có thể đào lên cách tôi tiếp cận điều này. – kamranicus
Được rồi, tôi không bao giờ phải tạo bất kỳ ràng buộc xác thực tùy chỉnh nào, chúng tôi đã sử dụng các thuộc tính của MVC để xuất các thuộc tính xác thực và cũng sử dụng phương thức trợ giúp 'parseDynamicContent' khi thực hiện các cuộc gọi AJAX. Xem qua jquery.unobtrusive.js và tôi chắc chắn có một phương pháp bạn có thể gọi để thêm các quy tắc động. – kamranicus