Я относительно новичок в KO (начался 2 дня назад) и пытался попробовать несколько простых примеров. В настоящее время у меня проблема с этим фрагментом кода.Knockoutjs не обновляет пользовательский интерфейс в этом случае
<div id="idChangeStyle">
<span data-bind="style: { background: GetAge() < 18 ? 'red':'white'}">Enter Your Age:</span>
<input type="text" data-bind="value: GetAge"></input>
</div>
function ageViewModel() {
var self = this;
self.age = ko.observable(18);
self.GetAge = ko.computed({
read: function() {
return self.age();
},
write: function (value) {
value = parseInt(String(value).replace(/[^\d]/g, ""));
if (isNaN(value))
self.age(18);
else
self.age(value);
}
});
};
ko.applyBindings(new ageViewModel(), document.getElementById('idChangeStyle'));
В основном приложение принять один вход (возраст). Я использую записи, доступные для записи, для синтаксического анализа ввода в INTEGER, и после синтаксического анализа, если его NaN я пытаюсь установить для возраста значение по умолчанию , т.е. 18. Также у меня есть простая логика в html, где я меняю фон span на красный цвет, если возраст ниже 18
в нормальном случае он работает нормально, вот когда я получаю в проблему: -
Case 1:
Current Input: 18 (initial case)
enter *4* then tab //works
enter *a* then tab //work (defaults to 18)
enter *a* then tab //doesn't work
case 2:
current input: 18
enter *a *then tab* //*doesn't work
Я проверил код нокаута, чтобы увидеть, что происходит в случае, когда после куска прогона кода: -
if(isNaN(value))
self.age(18);
.. в следующей строке: -
// Ignore writes if the value hasn't changed
if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue, arguments[0])) {
как _latestValue
и arguments[0]
имеет то же значение (18), так что не делает ничего. Из-за отсутствия изменения значения возраста теперь свойство viewmodel и пользовательский интерфейс не синхронизированы.
Это потому, что я делаю это неправильно?
Вы должны смотреть в использовании [Нокаут Validation] (https: // GitHub.com/ericmbarnard/нокаут-валидация). –