これは、空のテキスト ボックスの値が"" (空の文字列) であるが、nullではないために発生します。
そのため、新しい値を設定する前に、値が空の文字列かどうかを確認する必要があります。空の場合は、nullを手動で割り当てます。
ノックアウトの更新。カスタムの ko バインディングを書くことができます。これですべてが実行されます。以下に例を示します (最適な例ではない可能性があります)。
Javascript:
ko.bindingHandlers.nullableValue = {
init: function (element, valueAccessor, allBindingsAccessor) {
var underlyingObservable = valueAccessor();
var interceptor = ko.dependentObservable({
read: underlyingObservable,
write: function (value) {
if (value == '') {
underlyingObservable(null);
return;
}
underlyingObservable(value);
}
});
ko.bindingHandlers.value.init(element, function () { return interceptor; }, allBindingsAccessor);
},
update: ko.bindingHandlers.value.update
};
HTML
<input type="text" data-bind="nullableValue: myNullableProperty" />
それが役に立てば幸い。