我收到错误:
未捕获的InvalidStateError:无法读取' selectionDirection'属性来自' HTMLInputElement':输入元素的类型('复选框')不支持选择。
在:
<div class="panel-heading paddingRight20px">
<input style="position: absolute;" type="checkbox" data-bind="checked: IsSelectedCoverage" />
</div>
当我调试代码时,我发现当我尝试序列化viewmodel(具有IsSelectedCoverage
可观察的)时会出现此错误。
我正在序列化的Ajax调用:
self.finish = function () {
debugger;
var CorrespondenceData = ko.toJSON(self);
$.ajax({
url: endPoints.Finish + '/' + self.MemberId(),
type: 'POST',
dataType: 'json',
data: CorrespondenceData,
contentType: 'application/json; charset=utf-8',
beforeSend: function () {
startSpinner();
}
})
我不确定这是否是由于序列化模型造成的。
答案 0 :(得分:1)
就像@Jeroen所说的那样,我们至少需要看一下你的视图模型来确定原因,但这里有一些可能有用的东西:你依赖于Knockout提供的开箱即用的序列化,但是你可以覆盖它以更加确定返回的内容。
如果你向你的视图模型添加一个名为toJSON
的函数,那么这将由Knockout调用(尽管你可以轻松地自己调用它)。这样就可以对序列化的内容和方式进行更精细的控制。
[source]
在这个toJSON
函数中,如果你不想单调地写出整个JSON字符串,那么你可以构建一个非常简单的对象并在其上调用toJSON
。
例如,假设您的视图模型有15个可观察对象,但服务器只对其中的2个firstName
和lastName
感兴趣:
var toJSON = function() {
return JSON.stringify({
firstName: this.firstName(),
lastName: this.lastName()
});
this.firstName()
获取同一视图模型上firstName
可观察值的值。
在该视图模型上调用toJSON
或ko.toJSON
现在将返回仅包含这两个属性的JSON字符串
可能是您的视图模型上有一些无关的属性,它会将意外的内容发送回服务器。