我正在尝试学习如何使用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不是函数


javascript -  knockout :无法删除新添加的项目-LMLPHP

SupervisorId是一个下拉列表。 AddSupervisor调用是通过按钮进行的​​。如果需要,我可以显示HTML。另外,尽管我可能不需要此if

if (request.SupervisorID() > 0)


即使没有它,我也需要添加的主管的ID。

最佳答案

我猜服务器端不区分大小写,并且正在使用SupervisorID加载数据。添加一个新的时,您将使用SupervisorId(小写的d)创建它。服务器必须接受它。 JavaScript不是。

您需要将新创建的用户更改为使用SupervisorID,或者将RemoveSupervisor函数使用为SupervisorId-无论哪种更改在您的总体结构中都更有意义。

09-18 21:09