У меня возникла ситуация, когда мне нужно проверить максимальную величину поля в моей модели просмотра. Однако максимальная сумма должна быть переменной и рассчитываться в зависимости от элемента пользовательского интерфейса, выбранного вне этой модели. Я попытался включить наблюдаемый в качестве параметра в свой пользовательский валидатор, но он не обновляется при изменении значения.Нокаут Пользовательская проверка с наблюдаемым параметром
У меня такое чувство, что после того, как код проверки выполняется в первый раз, он держится за параметры.
HTML, из списка, который не использует Нокаут
<select id="ContentsReplacementAmount">
<option value="25000">£25000</option>
<option value="50000">£50000</option>
<option value="75000">£75000</option>
</select>
Вот это dummed вниз версия кода, я использую.
var SpecifiedValuablesViewModel = function (maxSpecifiedItemAmount) {
var self = this;
self.maxSpecifiedItemAmount = ko.observable(maxSpecifiedItemAmount);
self.amountToAdd = ko.observable().extend({
validation: {
validator: function (val, max) {
return val <= max;
},
message: 'The amount must be a maximum of £{0}',
params: self.maxSpecifiedItemAmount()
}
});
};
var specifiedValuablesViewModel = new SpecifiedValuablesViewModel($('#ContentsReplacementAmount').val());
ko.applyBindings(ko.validatedObservable(specifiedValuablesViewModel), document.getElementById('SpecifiedValuables'));
событий за пределами из maxSpecifiedAmount
$('#ContentsReplacementAmount').on('change', function() {
specifiedValuablesViewModel.maxSpecifiedItemAmount(parseInt($(this).val()));
});
Мой вопрос, как я могу добиться этого?
Обычно я получаю строковое представление числа в $ (asdf) .val(), и часто побочный эффект === или <= имеет тенденцию быть недопустимым ... убедитесь, что ваш 'max' и/или 'val' не являются строкой. – beauXjames
Это тип строки в этом примере, но не в моем приложении. Это просто не изменится. Любые другие идеи? Я обновлю код выше – Stokedout
parseInt (strNumber)? – beauXjames