Выбранное поле не заполняется предопределенными selectedOptions - PullRequest
0 голосов
/ 21 декабря 2018

У меня возникают трудности с получением выбранного поля для выбора нескольких полей для заполнения при настройке выбранных параметров и последующим обновлением поля.

В моем приложении я использую knockout.js для привязки observables / observableArrays кмои поля и в выбранном поле параметры представляют собой список объектов.Основываясь на параметрах, выбранных в этом поле, я хочу заполнить отдельный раскрывающийся список ранее выбранными объектами.

Все отлично работает, когда я запускаю без предварительно выбранных параметров, однако, когда я заполняю выбранныепараметры knockout observableArray с использованием JavaScript, а затем вызов выбранной команды обновления, выбранное поле остается пустым, но отдельный выпадающий список успешно обновляется.

Html:

<label>User(s):</label>
<select class="chosen form-control" multiple data-bind="options: userOptions, selectedOptions: selectedUsers,
            optionsText: function (user){ return user.name}"></select>
<label>Primary User:</label>
<select class="form-control" data-bind="options: selectedUsers, optionsText: 'name', value: primaryUser></select>

Переменные отключения:

vs.userOptions: ko.observableArray([]);
vs.selectedUsers: ko.observableArray([]);
vs.primaryUser: ko.observable();

userOptions / selectedUsers Объект:

{
id: -1,
email: "",
name: ""
}

JavaScript:

vs.selectedUsers.removeAll();
$.ajax({
    url: url,
    type: "GET",
    success: function (data) {
        for (var i = 0; i < data.length; i++) {                
            var object = {
                id: data[i].id,
                email: data[i].email,
                name: data[i].name
            };
            vs.selectedUsers.push(object);
            if (data[i].primaryUser) {
                vs.primaryUser(object);
            }
        }
        $(".chosen").trigger("chosen:updated");
    },
    error: function (xhr, status, error) {
        //Handle error...
    }
});

** Примечание: данные из вызова Ajax GET возвращают массив объектов, содержащих pkey, id,email, name и primaryUser, где primaryUser - логическое значение, определяющее, были ли они выбраны primaryUser

1 Ответ

0 голосов
/ 03 января 2019

Обновление: вернулся к проблеме и нашел исправление, которое работало.Мне пришлось настроить код в функции успеха AJAX:

vs.selectedUsers.removeAll();
$.ajax({
    url: url,
    type: "GET",
    success: function (data) {
        for (var i = 0; i < data.length; i++) {
            for (var j = 0; j < vs.userOptions().length; j++) {
                if (vs.userOptions()[j].id === data[i].id) {
                    vs.selectedUsers.push(vs.userOptions()[j]);
                    if (data[i].primaryUser) {
                        vs.primaryUser(vs.userOptions()[j]);
                    }
                    break;
                }
            }
        }
        $(".chosen").trigger("chosen:updated");
    },
    error: function (xhr, status, error) {
        //Handle error...
    }
});
...