Javascript 敲除确定下拉列表选择并将文本更新到数据库

Javascript 敲除确定下拉列表选择并将文本更新到数据库,javascript,knockout.js,Javascript,Knockout.js,我正在绑定从数据库检索的一些数据,然后将其更新回数据库。在本例中,数据库表有点奇怪,但有人指示我不要修改现有数据库 事情是这样的: 数据库表同时包含GoldMemberCardNo和SilverMemberCardNo,其中一次只填充其中一个(另一个为null) 我需要根据是否为空来确定该会员是GoldMemberCarder还是SilverMemberCarder,并将正确的会员类别和gold/silver卡号绑定到dropdownlist和初始页面加载时的文本输入我能够区分该会员是金会员还是

我正在绑定从数据库检索的一些数据,然后将其更新回数据库。在本例中,数据库表有点奇怪,但有人指示我不要修改现有数据库

事情是这样的: 数据库表同时包含GoldMemberCardNo和SilverMemberCardNo,其中一次只填充其中一个(另一个为null)

我需要根据是否为空来确定该会员是GoldMemberCarder还是SilverMemberCarder,并将正确的会员类别和gold/silver卡号绑定到dropdownlist和初始页面加载时的文本输入我能够区分该会员是金会员还是银会员的唯一方法是查看是否为特定会员填写了卡号

然后,管理员可以从选择中进行选择,并根据需要输入卡号,然后提交表单

假设用户以前是银会员卡持有人,现在需要更改为金会员卡持有人。管理员填写所需信息后,更新时,银会员卡将设置为空,金会员卡值将更新到数据库

我试过以下方法,但在这里卡住了。由于它是计算可观察的,因此ko.observable始终是相同的,并且不会在值更改时听取更改。因此,值post始终是初始值。我认为我的解决方案过于臃肿

函数MemberProfile(){
var self=这个;
self.SilverMemberCardNo=ko.observable();
self.GoldMemberCardNo=ko.observable();
self.CardNo=ko.observable();
self.MemberCategory=ko.computed(函数(){
if(self.SilverMemberCardNo()!=null){
返回“0”;
else if(self.GoldMemberCardNo()!=null){
返回“1”;
}
});
self.CardNo=ko.computed(函数(){
if(self.SilverMemberCardNo()!=null){
返回self.SilverMemberCardNo();
else if(self.GoldMemberCardNo()!=null){
返回self.GoldMemberCardNo();
}
});
self.GetMemberProfile()=函数(){
$.ajax({
数据类型:“json”,
键入:“GET”,
网址:。。。,
成功:{
fromJS(数据,{},self);
}
})
}
self.UpdateMemberProfile()=函数(){
如果(self.MemberCategory==“0”){
self.SilverMemberCardNo(self.CardNo);
self.GoldMemberCardNo(空)
}
else if(self.MemberCategory==“1”){
self.SilverMemberCardNo(空);
self.GoldMemberCardNo(self.CardNo)
}
$.ajax({
数据类型:“json”,
键入:“PUT”,
网址:。。。,
数据:{
SilverMemberCardNo:self.SilverMemberCardNo,
GoldMemberCardNo:self.GoldMemberCardNo
......
}
}
}
应用绑定(newmemberprofile());
//从JSON返回数据
{
“SilverMemberCardNo”:空
“GoldMemberCardNo”:“123456789”
....
....
....
}

您可以使
MemberCategory
成为一个简单的可观察对象,并使用
self.GetMemberProfile()函数中的逻辑设置它的值

函数MemberProfile(){
var self=这个;
self.CardNo=ko.observable();
self.MemberCategory=ko.observable();
self.GetMemberProfile()=函数(){
$.ajax({
数据类型:“json”,
键入:“GET”,
网址:。。。,
成功:{
fromJS(数据,{},self);
if(self.SilverMemberCardNo()!=null){
自组成员类别(“0”);
}else if(self.GoldMemberCardNo()!=null){
自组成员类别(“1”);
}
}
})
}
self.UpdateMemberProfile()=函数(){
var-silverMemberCardNo;
var goldMemberCardNo;
如果(self.MemberCategory==“0”){
silverMemberCardNo=self.CardNo();
goldMemberCardNo=null;
}else if(self.MemberCategory==“1”){
silverMemberCardNo=null;
goldMemberCardNo=self.CardNo();
}
$.ajax({
数据类型:“json”,
键入:“PUT”,
网址:。。。,
数据:{
SilverMemberCardNo:SilverMemberCardNo,
GoldMemberCardNo:GoldMemberCardNo
}
}
}

另一个你可能无法控制的事情是,这种逻辑在服务器上执行更安全,而不是客户端。意思是在JavaScript中取出所有的逻辑,并在服务器上执行它。让客户端只呈现数据并将其发送回去。< /P> + 1用于<代码>这个逻辑将更加安全。在服务器上执行

。它也会更简单,在初始页面加载时可用,而不是AJAX调用。