Я использую функцию подписки нокаута, чтобы получить выбранное значение первого выпадающего списка, чтобы привязать значение во втором выпадающем списке. Я сохраняю выбранные значения выпадающего списка в сеансе и изменяю значение раскрывающегося списка при обновлении. В это время подписка называется дважды в результате, я получаю каждое значение, повторяющееся в раскрывающемся списке.Функция подписки вызывается более одного раза при перезагрузке
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) { }
});
Вы должны использовать свою модель просмотра для установки параметров. –
Я уверен, что $ ('# country') .change() и self.selectedCountry (COUNTRYbind); будут инициировать ваше событие подписки. (Не 100% я не коснулся нокаута какое-то время) – KevDevMan