gpt4 book ai didi

javascript - 重新加载时订阅函数被多次调用

转载 作者:行者123 更新时间:2023-11-28 19:05:15 25 4
gpt4 key购买 nike

我使用knockout的订阅功能来获取第一个下拉列表中的选定值来绑定(bind)第二个下拉列表中的值。我将选定的下拉列表值存储在 session 中,并在刷新时更改下拉列表的值。此时,订阅被调用两次,结果我在下拉列表中重复了每个值。

   self.getcountry = function () {         
try {
//code
$.ajax({
//code
statusCode: {
200: function (response) {
$.each(response, function (index, data) {
self.country.push(data);
})
if(SESSIONVALUES!=null)
{
for (var i = 0; i < SESSIONVALUES.length; i++) {
var COUNTRYbind=SESSIONVALUES[i].vCOUNTRY;

$('#country option').filter(function () { return $.trim($(this).val()) == parseInt( COUNTRYbind); }).attr('selected', true);
$('#country ').change();
self.selectedCountry(COUNTRYbind);// this is used to trigger the subscribe function

}


}
}
}
});
} catch (exception) { }
};

这是订阅功能方法,

  self.selectedCountry.subscribe(function (newValue) {
//code
try {

$.ajax({
//code
statusCode: {
200: function (response) {
$.each(response, function (index, data) {
self.state.push(data);
})
if(SESSIONVALUES!=null)
{
for (var i = 0; i < SESSIONVALUES.length; i++) {
var statebind=SESSIONVALUES[i].vstate;
$('#states option').filter(function () { return $.trim($(this).val()) == parseInt(statebind); }).attr('selected', true);
$('#states').change();

}
}
}
}

});
} catch (Exception) { }

});

最佳答案

我一小时前就遇到了这个问题!

试试这个:

ko.subscribable.fn.subscribeChanged = function (callback) {
var oldValue;
this.subscribe(function (_oldValue) {
oldValue = _oldValue;
}, this, 'beforeChange');

this.subscribe(function (newValue) {
callback(newValue, oldValue);
});
};

然后您可以订阅,当触发时您可以将 oldValue 与 newValue 进行比较。

例如在你的 View 模型中

self.selectedCountry.subscribeChanged(function (newValue, oldValue) {
if (newValue != oldValue) // Value has changed.
{

希望这有帮助。

关于javascript - 重新加载时订阅函数被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com