Knockout.js: observable.subscribe с window.location.reload () вызывает бесконечный цикл перезагрузки

1

У меня есть раскрывающийся список (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"));
});
Теги:
knockout.js

1 ответ

1
Лучший ответ

Попробуйте установить начальное значение selectedDepartment в undefined вместо 0. Прямо сейчас выпадающий список отображается с начальным значением, которое не существует в списке параметров (поскольку параметры появляются позже из вызова ajax), поэтому он имеет для изменения выбранного раздела, наблюдаемого от 0 до неопределенного, который активирует вашу подписку.

self.selectedDepartment = ko.observable(undefined);
  • 0
    Спасибо за ответ @ Джеймс Спик, это действительно сработало .. !! :) Теперь мне просто нужно найти логику для получения куки и установить выбранное значение в раскрывающемся списке ...
  • 0
    Остался только один вопрос: когда я сделал это так: self.selectedDepartment = ko.observable (JSHelpers.readCookie ("seldep")); Это снова закончилось бесконечным циклом ..
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню