KnockoutJSでのMVC 4の使用。カスタムノックアウトバインディングで目立たない検証をバインドできますか?私は現在afterRender
のテンプレートを使用してバリデーションを再バインドしています。私はそれが自動的にバインディングを追加したいと思っています。このように:カスタムKnockoutJSバインディングを使用した目立たない検証のバインド
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);
}
};
私はそれを一日中扱いました。私は非常に非効率的ではありません。
私が現在行っているやり方は以下の通りです。たぶん私はそれに満足しているはずです。しかし、私は人々が前にこれを試したことを推測しています。
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);
}
});
}
});
}
私はこれに対処しなければならなかった、おそらく私はこれにどのようにアプローチしたかを掘り下げることができるだろう。 – kamranicus
申し訳ありません、カスタム検証バインディングを作成する必要はありませんでした。MVCの属性を使用して検証属性を出力し、AJAX呼び出し時に 'parseDynamicContent'ヘルパーメソッドを使用しました。 jquery.unobtrusive.jsを見て、ルールを動的に追加するために呼び出すことのできるメソッドがあると確信しています。 – kamranicus