Я проработал через документацию KnockoutJS и попытался изменить пример 3 раздела «Записываемые вычисленные наблюдаемые» в этом page.Является ли это ошибкой KnockoutJS или я делаю несколько привязок неправильно?
В примере в основном показано текстовое поле и отображается сообщение, если пользователь вводит нечисловое значение в текстовое поле. Я попытался изменить код, чтобы текстовое поле было розовым, когда появляется сообщение.
Проблема заключается в том, что при вводе недопустимого значения текстовое поле становится розовым, как ожидалось, но введенное вами значение заменяется на то, что изначально было там. Я понятия не имею, почему это происходит, поскольку все работает нормально, прежде чем я добавил привязку стиля, чтобы получить розовый фон. Попробуйте удалить привязку стиля и обратите внимание, как изменяется поведение при вводе недопустимого значения.
Что происходит?
Код ниже или опробовать jsfiddle.
<p>
Enter a numeric value:
<input data-bind="value: attemptedValue
,style: {backgroundColor: lastInputWasValid() ?
'transparent' :
'pink' }"/>
</p>
<div data-bind="visible: !lastInputWasValid()">That's not a number!</div>
function MyViewModel() {
this.acceptedNumericValue = ko.observable(123);
this.lastInputWasValid = ko.observable(true);
this.attemptedValue = ko.computed({
read: this.acceptedNumericValue,
write: function (value) {
if (isNaN(value))
this.lastInputWasValid(false);
else {
this.lastInputWasValid(true);
this.acceptedNumericValue(value); // Write to underlying storage
}
},
owner: this
});
}
ko.applyBindings(new MyViewModel());
EDIT: Вот еще один fiddle со стилем связывания удалены. Попробуйте добавить букву «a» и сосредоточиться на текстовом поле. Обратите внимание на то, как буква «а» остается там. Попробуйте это с исходным текстовым полем fiddle и обратите внимание, как он удален. Единственное изменение между двумя скриптами - наличие привязки стиля.
вы пробовали удаление привязку стиля, как я упоминается? При этом поведение изменяется так, что недопустимое значение остается в текстовом поле вместо удаления. Вот новая [скрипка] (http://jsfiddle.net/6JzJ8/) с удалением стиля.Попробуйте добавить в письмо «a» и обратите внимание, как он там остается. Попробуйте сделать это с оригинальной скрипкой и обратите внимание на разницу при добавлении буквы «a» и оставьте текстовое поле. – xTRUMANx