Javascript 未触发淘汰订阅回调

Javascript 未触发淘汰订阅回调,javascript,jquery,knockout.js,subscribe,Javascript,Jquery,Knockout.js,Subscribe,我正在使用Knockout subscribe函数。我有3个组合框。在我从上一个组合中选择一条记录之前,每个组合都没有数据(第一个组合框除外) 当我选择时,它工作得很好。在subscribe回调中,它正确地给出了组合框中选择的值 但是,当我单击该行并希望触发相同的回调时,它就不起作用了 函数UNVViewModel(){ var self=这个; var=vm; 自我大陆=ko.observearray([]); 自身国家=可观察到的韩国([]); 自状态=ko.observearray([

我正在使用Knockout subscribe函数。我有3个组合框。在我从上一个组合中选择一条记录之前,每个组合都没有数据(第一个组合框除外)

当我选择时,它工作得很好。在subscribe回调中,它正确地给出了组合框中选择的值

但是,当我单击该行并希望触发相同的回调时,它就不起作用了

函数UNVViewModel(){
var self=这个;
var=vm;
自我大陆=ko.observearray([]);
自身国家=可观察到的韩国([]);
自状态=ko.observearray([]);
self.AllData=ko.observearray([]);
self.concod=ko.observable();
self.cntrycod=ko.observable();
self.statcod=ko.observable();
self.Load=function(){
$.getJSON('../ProjectAPI/api/Project/contraction',函数(数据){self.contraction(JSON.parse(数据));})
$.getJSON('../ProjectAPI/api/Project/Countries',函数(数据){self.Countries(JSON.parse(数据));})
$.getJSON('../ProjectAPI/api/Project/States',函数(数据){self.States(JSON.parse(数据));})
};
self.AllData=[
{
州名:“开罗”,
州代码:111,
国家代码:11,
代码:1,,
名称:“非洲”,
国名:“埃及”
},
{
州名:“奥兰”,
州代码:112,
国家代码:12,
代码:1,,
名称:“非洲”,
国名:“阿尔及利亚”
},
{
国名:“罗马”,
州代码:121,
国家代码:21,
代码:2,,
大洲名称:“欧洲”,
国名:“意大利”
}
];
自调制订阅(功能(con){
如果(con==未定义){
返回false;
}否则{
$.getJSON(
“./ProjectAPI/API/Project/Countries?continencode=“+con,函数(数据){self.Countries(JSON.parse(数据));}”
).complete(函数(){
if(self.Clickedconcod()!==未定义){
self.concod(self.Clickedconcod());
}
});
}
});
self.cntrycod.subscribe(函数(cnty){
如果(cnty==未定义){
返回false;
}否则{
$.getJSON(
“./ProjectAPI/API/Project/States?CountryCode=“+self.cntrycod()+”&ContinentCode=“+self.concod,函数(数据){self.States(JSON.parse(数据));}”
).complete(函数(){
if(self.Clickedcntrycod()!==未定义){
self.cntrycod(self.Clickedcntrycod());
}
});
}
});
}
var-vm;
$(文档).ready(函数(){
vm=新的UNVViewModel();
vm.Load();
ko.应用绑定(vm);
});

大陆名称
国名
州名

当可观察到的更改时,subscribe回调将触发。当您在下拉列表中选择某个内容时,您正在更改这些可观察值,但您没有更改行中的可观察值

如果要从下拉菜单select/Knockout subscribe回调调用相同的代码,并单击行,请提取要运行到单独函数中的公共代码,并从两个位置调用它

我已经更改了下面的代码,添加了一个警报,显示在选择下拉列表或单击行时未来的XHR调用,注释掉XHR调用,并将公共代码提取到函数中

例如,
self.refreshcomad
是新的通用代码函数。下拉列表更改时,它由
self.concod.subscribe
调用;单击行时,由
self.CountryClick
调用

self.refreshConcod = function(con) {
    if (con == undefined) {
      return false;
    } else {
      alert("../ProjectAPI/API/Project/Countries?ContinentCode=" + con);
      //$.getJSON(
      //  "../ProjectAPI/API/Project/Countries?ContinentCode=" + con,
      //  function(data) {
      //    self.Countries(JSON.parse(data));
      //  }
      //);
    }
};
self.concod.subscribe(function(con) {
    self.refreshConcod(con);
});
self.CountryClick = function() {
    self.refreshConcod(this.ContinentCode);
};
函数UNVViewModel(){
var self=这个;
var GSTViewModel=vm;
var=vm;
自我大陆=ko.observearray([]);
自身国家=可观察到的韩国([]);
自状态=ko.observearray([]);
self.AllData=ko.observearray([]);
self.concod=ko.observable();
self.cntrycod=ko.observable();
self.statcod=ko.observable();
self.Load=function(){
self.大陆=[
{大陆名称:“非洲”,大陆代码:1},
{大陆名称:“欧洲”,大陆代码:2},
{大陆名称:“亚洲”,大陆代码:3}
];
自我保护国家=[
{国家名称:“埃及”,国家代码:11,大陆代码:1},
{国家名称:“阿尔及利亚”,国家代码:12,大陆代码:1},
{国家名称:“加纳”,国家代码:13,大陆代码:1},
{国家名称:“意大利”,国家代码:21,大陆代码:2},
{国家名称:“丹麦”,国家代码:22,大陆代码:2},
{国家名称:“法国”,国家代码:23,大陆代码:2},
{国家名称:“德国”,国家代码:24,大陆代码:2},
{国家名称:“俄罗斯”,国家代码:31,大陆代码:3},
{国家名称:“马来西亚”,国家代码:32,大陆代码:3},
{国家名称:“中国”,国家代码:33,大陆代码:3},
{国家名称:“土耳其”,国家代码:34,大陆代码:3}
];
自我状态=[
{州名:“开罗”,州代码:111,国家代码:11,州代码:1},
{州名:“亚历克斯”,州代码:211,国家代码:11,州代码:1},
{州名:“Oran”,州代码:112,国家代码:12,大陆代码:1},
{州名:“Blida”,州代码:212,国家代码:12,州代码:1},
{州名:“阿克拉”,州代码:113,国家代码:13,大陆代码:1},
{
州名:“库马西”,
州代码:213,
国家代码:13,
代码:1
},
{州名:“罗马”,州代码:121,国家代码:21,大陆代码:2}