Я попытался выполнить приведенные ниже предложения, но ни один из них не вызывал требуемую реакцию каждый раз, когда значение было обновлено. Это может быть связано с моей реализацией, поскольку я новичок в Knockout.Нокаут - не удается обновить наблюдаемое значение, используя подписку (из-за проверки расширения)
У меня есть наблюдаемое (Amount), которое привязано к TextBoxFor.
@Html.TextBoxFor(m => m.Amount, new { type = "number", data_bind = "value: Amount" })
Когда значение введено оно должно быть подтверждено, чтобы обеспечить его не превышает 999999. В дополнение к этому, если значение меньше, чем 50, то оно должно быть установлено до 50. Эти проверки потребности каждый раз, когда изменяется «Сумма».
var viewModel = {
Amount: ko.observable().extend({numeric: 0, max: 999999})
};
Я попытался реализации решения (в ответ на мой предыдущий пост), но я не мог заставить их работать.
Лучшее, что я придумал, заключается в создании вычислений следующим образом. Это проверяет правильность ввода и обновления с первой попытки. Последующие изменения значений не вызывают изменения на экране, а переходят через код, похоже, обновляют значение ViewModel.Amount.
@Html.TextBoxFor(m => m.Amount, new { type = "number", data_bind = "value: amountMin" })
quoteVehicleViewModel.VehicleMileage = ko.observable(0);
viewModel.amountMin = ko.computed({
read: function() {
return viewModel.Amount();
},
write: function (value) {
if (value < 50) {
viewModel.Amount(50);
}
}
}).extend({ numeric: 0, max: 999999 });
** А «viewModel.Amount()» вошел в консоли показывает значение как 1000, но значение на экране все еще показывает, как введенное значение.
Любая помощь с благодарностью получил
Джон
Большое спасибо за ваш ответ. Джозеф. Я видел, как работала JSFiddle. Я попытался реализовать в своем решении, и пока я вижу, что функция coerceMin работает при загрузке страницы, она не попадает, когда я изменяю значение в текстовом поле. Есть ли что-нибудь еще (от вашего JSFiddle), которое требуется для этого, кроме кода, который вы добавили ниже? – JohnT
Есть скрытая строка 'ko.validation.registerExtenders();', которую я не ввел в фактический фрагмент расширителя в ответе. Вы включили эту строку в свой код? –
Привет. Да, я включил registerExtenders, и код coerceMin запускается при загрузке страницы, а не при вводе значений. Спасибо – JohnT