У меня есть раскрывающийся список (select/option), который должен обновлять всю страницу (перезагружать) при изменении.. (я устанавливаю значение cookie при изменении...)
Что просходит :
Когда я использую window.location.reload() внутри подписки (см. Код ниже), он заканчивается бесконечным циклом перезагрузки.
Как я могу избежать этого?
Выберите элемент управления
<select id="ddlSelectDepartment" class="form-control" data-bind="options: departments, optionsCaption: 'Alle', optionsText: 'name', optionsValue: 'id', value: selectedDepartment"></select>
Управление нокаутом
$(document).ready(function() {
var selDepCookie = JSHelpers.readCookie("seldep");
console.log("COOKIEMONSTER! " + selDepCookie);
var DepModel = function() {
var self = this;
self.departments = ko.observableArray();
self.selectedDepartment = ko.observable(0);
self.selectedDepartment.subscribe(function (latest) {
//console.log("Input changed");
JSHelpers.setCookie('seldep', latest);
window.location.reload(); // this ends in a infinite loop !
}, self);
}
var urlForSelectDepartment = 'api/Customer/GetDepartmentsFull';
$.ajax({
type: 'GET',
url: urlForSelectDepartment,
success: function (data) {
depmodel.departments(data);
},
error: function (e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
var depmodel = new DepModel();
ko.applyBindings(depmodel,
document.getElementById("selectDepartmentContainer"));
});
Попробуйте установить начальное значение selectedDepartment в undefined вместо 0. Прямо сейчас выпадающий список отображается с начальным значением, которое не существует в списке параметров (поскольку параметры появляются позже из вызова ajax), поэтому он имеет для изменения выбранного раздела, наблюдаемого от 0 до неопределенного, который активирует вашу подписку.
self.selectedDepartment = ko.observable(undefined);