Kendo MVVM Dropdown - Как установить начальное значение на основе других данных?

У меня есть следующий html для Kendo MVVM DropDownList:

                <select id="responseTypeDDL"
                    data-role="dropdownlist"
                    data-text-field="SystemResponseTypeCode"
                    data-value-field="SystemResponseTypeId"
                    data-bind="value: selectedSystemResponseTypeCode, source: responseTypes">
                </select>

Это моя модель просмотра:

        SC.ViewModels.Reference.ResponseTypeDataSource.read();

        var responseTypeDDL = kendo.observable({
            responseTypes: SC.ViewModels.Reference.ResponseTypeDataSource,
            selectedSystemResponseTypeCode: null,
            setSelectedSystemResponseTypeCode: function (code) {
                this.selectedSystemResponseTypeCode = code;
            },
        });

        kendo.bind($("#responseTypeDDL"), responseTypeDDL);

        // after reading data, I call the method to set the selected value like this:
        self.ResponseTypeDDL.setSelectedSystemResponseTypeCode(results.code);

Метод ResponseTypeDataSource.read() возвращает список «XML», «JSON». Это поле SystemResponseTypeCode. Я также читаю другой элемент данных из базы данных и проверяю его тип ответа. Допустим, это «JSON». Как настроить раскрывающийся список для выбора «JSON»?


person Scott    schedule 22.07.2014    source источник
comment
Не могли бы вы обновить вопрос с кодом, в котором вы пытались установить значение раскрывающегося списка?   -  person D_Learning    schedule 23.07.2014
comment
Я не пытался установить значение. Я не знаю, с чего начать...   -  person Scott    schedule 23.07.2014
comment
Вы можете установить так же, как вы установили раскрывающийся список, если хотите связать представление после загрузки деталей. Например, см. пример: jsfiddle.net/D_Learning/m9W3g   -  person D_Learning    schedule 23.07.2014
comment
Я добавил значение для привязки данных, а также функцию setSelectedSystemResponseTypeCode, но новое значение никогда не устанавливается как выбранное.   -  person Scott    schedule 23.07.2014
comment
Попробуйте использовать пример потока и кода, показанных на jsbin.com/eqimiz/176/edit, который предоставлен и объяснен администратором Telerik на странице telerik.com/forums/   -  person D_Learning    schedule 23.07.2014
comment
Но все, что делает, это показывает, что было выбрано. Я хочу пойти другим путем, так сказать. Я хочу иметь раскрывающийся список с некоторыми элементами в нем. По умолчанию будет выбран первый элемент из источника данных. Это происходит сейчас. Теперь я хочу прочитать значение из базы данных и сделать так, чтобы ЭТО значение было выбрано в раскрывающемся списке. Кажется, что это должно быть довольно просто, но я не могу понять.   -  person Scott    schedule 23.07.2014


Ответы (2)


Во-первых, эта часть кажется неправильной

setSelectedSystemResponseTypeCode: function (code) {
    this.selectedSystemResponseTypeCode = code;
},

Вы должны обязательно вызвать метод set() при изменении наблюдаемой переменной, иначе он может не обновить привязки:

this.set("selectedSystemResponseTypeCode", code);

И на ваш актуальный вопрос

Вам нужно установить data-value-primitive="true", чтобы работать только с идентификатором (Кэндо Документы) (Обратите внимание на изменения ниже, value: selectedSystemResponseTypeId)

<select id="responseTypeDDL"
    data-role="dropdownlist"
    data-text-field="SystemResponseTypeCode"
    data-value-field="SystemResponseTypeId"
    data-value-primitive="true"
    data-bind="value: selectedSystemResponseTypeId, source: responseTypes">
</select>
SC.ViewModels.Reference.ResponseTypeDataSource.read();

var responseTypeDDL = kendo.observable({
    responseTypes: SC.ViewModels.Reference.ResponseTypeDataSource,
    selectedSystemResponseTypeCode: null,
    selectedSystemResponseTypeId: null,
    setSelectedSystemResponseTypeId: function (id) {
        this.set("selectedSystemResponseTypeId", id);
    },
});

kendo.bind($("#responseTypeDDL"), responseTypeDDL);

// Get your id
var id = ...    
responseTypeDDL.setSelectedSystemResponseTypeId(id);

Рабочий пример: http://dojo.telerik.com/AbIm/8

person Kaan Yürükçü    schedule 15.08.2014

Мне удалось вручную установить значение в раскрывающемся списке, не прибегая к data-value-primitive="true", потому что мне нужно получить доступ к выбранному значению и отобразить другие поля.

Вот решение:

var id = 1004;
var dataItem = responseTypeDDL.responseTypes.get(id); //get the id in your datasource
responseTypeDDL.set("selectedsystemResponse", dataItem);
person NextProgrammer    schedule 24.06.2015