我正在尝试学习如何使用KnockOut ...以前从未有过,而我已经在已经使用过KnockOut的网站上大跌眼镜。这里的一切工作正常:
function MasterViewModel() {
var self = this;
self.Supervisors = ko.mapping.fromJS(@Html.Raw(JsonConvert.SerializeObject(Model.Supervisors)));
self.AddSupervisor = function(request) {
var request = new Supervisor({
FullName: $('#SupervisorId option:selected').text(),
SupervisorId: $('#SupervisorId option:selected').val()
});
self.Supervisors.push(request);
// do server side call here
}
self.RemoveSupervisor = function(request) {
if (request.SupervisorID() > 0)
{
self.Supervisors.remove(request);
// do server side call here
}
}
}
好。一切都可以正常工作:
来自服务器的初始数据加载并完美显示
我可以删除现有项目(在原始页面加载时来自服务器)
我可以添加新项目
但是,当我尝试删除刚刚添加的项目时,得到以下信息:
未捕获的TypeError:request.SupervisorID不是函数
SupervisorId
是一个下拉列表。 AddSupervisor
调用是通过按钮进行的。如果需要,我可以显示HTML。另外,尽管我可能不需要此if
:if (request.SupervisorID() > 0)
即使没有它,我也需要添加的主管的ID。
最佳答案
我猜服务器端不区分大小写,并且正在使用SupervisorID
加载数据。添加一个新的时,您将使用SupervisorId
(小写的d
)创建它。服务器必须接受它。 JavaScript不是。
您需要将新创建的用户更改为使用SupervisorID
,或者将RemoveSupervisor
函数使用为SupervisorId
-无论哪种更改在您的总体结构中都更有意义。