发生这种情况是因为空文本框的值为“”(空字符串),但不是null。
因此,在设置新值之前,您应该检查值是否为空字符串,如果是这样 - 手动分配null。
Knockout的更新。 你可以编写自定义的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" />
希望它能帮助。
对不起,我已经更新了它使问题更清楚的问题,我使用了knockout和MVVM,所以我不写任何代码来更新值,我相信问题在于BreezeJS库。 – 2013-03-21 08:16:30
虽然你当然可以写一个自定义绑定,但我们认为你不应该为这个常见的情况。我们将改进我们的DataType.Parse逻辑来正确处理这个问题;不能说多快......但很快。 – Ward 2013-03-22 06:43:24