2

我有一个视图页面,我正在使用 knockout.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 回答