как связать данные в выпадающем списке с помощью нокаута - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть этот выпадающий список, но он не привязывается к нужной мне записи c. Например, если я создаю запись и затем выбираю из выпадающего списка «имя рабочего процесса 1» для поля рабочего процесса, а затем сохраняю изменения. я вернусь к списку go, а затем открою созданную мной запись, но при загрузке сведений в раскрывающемся списке не выбирается «имя рабочего процесса 1», а вместо «рабочего процесса» выбирается только «Выбрать рабочий процесс». имя 1 "

        <select id="workflow-name" style="width:600px" class="form-control errorInput" data-tooltip="tooltip" data-orientation="right" data-tab="2" data-bind="options: $root.WorkFlowsNameList,optionsCaption:'Select a Workflow',  optionsText: 'ShortDescription', optionsValue: 'ID', value: WorkFlow_ID, attr: {'data-title': window.LabelVM.trigger_details_workflowname, 'data-con': window.LabelVM.trigger_workflowname_popover, 'data-popover': 'popover' }"></select>

Это код ко, который отображает данные

function editData(data, e) {
    localStorage.processId = "";
    router.navigate('#/trigger/' + data.ID() + "/" + data.WorkFlow_ID());
}

Я использую WorkFlow_ID в качестве параметра для предварительного выбора значения параметров, которое будет отображаться, но это не связывает вообще.

1 Ответ

0 голосов
/ 19 апреля 2020

Вы сталкиваетесь с общей ошибкой при использовании optionsValue вместе с value.

Когда вы указываете оба, значение свойства, ограниченного optionsValue, будет заполнять объект, ограниченный value.
Проблема в том, что Knockout не может знать, как использовать это значение для получения объекта из ограниченного options.

Таким образом, если вы используете оба, вы должны привязать вычисляемую наблюдаемую (или простую функцию) к value, чья работа состоит в том, чтобы извлекать (откуда угодно) правильный объект.

См. Здесь пример .

РЕДАКТИРОВАТЬ:
Пожалуйста, прочитайте options документация , прежде чем идти вперед, иначе следующее не поможет вам.

Код, который вы добавили, имеет несколько проблем. Основная проблема заключается в том, что это не код, который определяет вашу модель представления, поскольку я не вижу в ней WorkFlowsNameList.

Итак, я предполагаю, что у вас где-то есть этот код, и я назову его viewModel в этом отношении. Именно там вы должны добавить новый код:

function viewModel(items) {
    var self = this;
    self.WorkFlowsNameList = ko.observableArray(items);  
    self.WorkFlow_ID = ko.observable();
    self.selectedOption = ko.computed(function(){
        return ko.utils.arrayFirst(self.WorkFlowsNameList, function(item){
            return item.ID === self.WorkFlow_ID();
        });
    });
}
...