2

ノックアウト.jsを使用してフィールドを検証しているビューページがあります。スペイン語、フランス語など、さまざまな国の言語で、つまりローカリゼーションを使用して自分のフィールドを検証したいと思います。el-GR.js、fr-FR.js、ru-RU.jsなどのファイルをjsフォルダーに追加して参照しました。では、どのようにしてmodalModal.jsページを検証またはチェックインできますか?

modalModal.js

    ko.validation.rules.pattern.message = 'Invalid.';
    ko.validation.configure({
    registerExtenders : true,
    messagesOnModified : true,
    insertMessages : true,
    parseInputAttributes : true,
    messageTemplate : null
    });

   var mustEqual = function (val, other) {
   return val == other();
   };

   var modalViewModel= {
   firstName : ko.observable().extend({
    minLength : 2,
    maxLength : 40
    }),
    lastName : ko.observable().extend({
    minLength : 2,
    maxLength : 10
    }),
    organisation : ko.observable().extend({
    minLength : 2,
    maxLength : 40
    }),

    email : ko.observable().extend({ // custom message
    email: true
    }),
    password: ko.observable()
    };

    modalViewModel.confirmPassword = ko.observable().extend({
    validation: { validator: mustEqual, message: 'Passwords do not match.', params: 
    modalViewModel.password }
    });
   modalViewModel.errors = ko.validation.group(modalViewModel);

  // Activates knockout.js
   ko.applyBindings(modalViewModel,document.getElementById('light'));
4

1 に答える 1

2

私は私の最新のKOプロジェクトのためにこれをしました

KO検証ルールをオーバーライドし、Globalizeプラグインを使用します。

ko.validation.rules.number.validator = function (value, validate) {
    return !String.hasValue(value) || (validate && !isNaN(Globalize.parseFloat(value)));
};

ko.validation.rules.date.validator = function (value, validate) {
    return !String.hasValue(value) || (validate && Globalize.parseDate(value) != null);
};

編集:ところで、Globalizeプラグインにバグがあり、そうでない場合でも数値の一部としてドット(。)を受け入れます。私はこのように修正しました

Globalize.orgParaseFloat = Globalize.parseFloat;
Globalize.parseFloat = function (value) {
    value = String(value);

    var culture = this.findClosestCulture();
    var seperatorFound = false;
    for (var i in culture.numberFormat) {
        if (culture.numberFormat[i] == ".") {
            seperatorFound = true;
            break;
        }
    }

    if (!seperatorFound) {
        value = value.replace(".", "NaN");
    }

    return this.orgParaseFloat(value);
};
于 2012-12-10T09:37:47.590 に答える