ko.observable () заканчивать пробел - PullRequest
0 голосов
/ 07 января 2020

У меня есть HTML текстовый ввод, называемый часами, который проверяется как число через расширитель выбивки. Если у пользователя, вводящего часы, есть пробел после введенного числа, я хотел бы просто урезать его, не получая уведомления о том, что введенные им часы не являются числом. Например, если они вводят «2.5», это должно быть правильно, так как я хочу, чтобы лишние пробелы автоматически обрезались. Как я могу сделать это с тем, что у меня есть ниже? Спасибо.

hours: ko.observable().extend({ number: true, required: true })

1 Ответ

0 голосов
/ 08 января 2020

Вы можете добавить функцию обрезки к наблюдаемым, например, добавив пользовательскую функцию к ko.subscribable.fn, как объяснено в другой SO post :

ko.subscribable.fn.trimmed = function() {
    return ko.computed({
       read: function() {
           return this();
       },
       write: function(value) {
           this(value.trim());
           this.valueHasMutated();
       },
       owner: this
   }).extend({ notify: 'always' });
};
var vm = function () {
  this.num = ko.observable().trimmed().extend({ number: true });
  this.num(' 2 ');
}
ko.applyBindings(new vm());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.min.js"></script>
<input type="text" data-bind="value: num" />

PS Не поддавайтесь искушению добавить trim() вызов в плагин валидатора Knockout number rule:

// this is the original 'number' rule implemetation, with a 'trim()' call added to it
ko.validation.rules['number'] = {
   validator: function (value, validate) {
        if (!validate) { return true; }
        return ko.validation.utils.isEmptyVal(value) || 
               (validate && /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value.trim()));
    },
    message: 'Please enter a number.'
};

. .. потому что вы не хотите, чтобы обрезка происходила во время проверки, но намного раньше, то есть: во время записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...