Привязка массива объекта к всплывающему мультиселекту сетки Kendo - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь привязать массив пар идентификаторов-значений к всплывающему редактору сетки кендо.

Получил все для создания новой записи.Всплывающий редактор загружает пользовательский редактор и успешно передает данные в контроллер.

Проблема заключается в том, что я пытаюсь редактировать записи.Записи корректно отображаются в строке, но когда я пытаюсь отредактировать ее, мультиселектор не содержит значений.

Разметка сетки

    $("#ProjectSites-SubContract-grid").kendoGrid({
        dataSource: {
            type: "json",                
            schema: {
                data: "Data",
                total: "Total",
                errors: "Errors",
                model: {
                    id: "Id",
                    fields: {
                        DateOfContract: { type: 'date', editable: true },
                        DateOfCompletion: { type: 'date', editable: true },
                        AmountOfContract: { type: 'number', editable: true },
                        Contractor: { defaultValue: { id: "", name: "" } }
                    }
                }
            },
        },
        columns: [            
        {
            field: "ScopeOfWork",
            title: "Scope of Work",
            template: "#=parseScopeOfWork(ScopeOfWork)#",
            editor: scopeOfWorkEditor
        },            
        ]
    });
});

Редактор объема работ

function scopeOfWorkEditor(container, options) {
    $('<input  data-text-field="name" data-value-field="id" data-bind="value:ScopeOfWork"/>')
        .appendTo(container)
        .kendoMultiSelect({
            dataSource: {
                data: [
                    @foreach (var scopeOfWork in Model.AvailableScopeOfWork)
                    {
                        <text>{ id : "@scopeOfWork.Value", name : "@scopeOfWork.Text" },</text>
                    },
                ]
            }
        });

parseScopeOfWork - этот метод выполняет итерации по списку объектов и объединяет имя.

function parseScopeOfWork(scopeOfWork) {
    var result = "";
    for (var i = 0; i < scopeOfWork.length; i++) {
        result += scopeOfWork[i].Name;
        if (i < scopeOfWork.length - 1)
        {
            result += ", <br/>";
        }
    }
    return result;
}

Вот снимок экрана:

enter image description here

1 Ответ

0 голосов
/ 06 февраля 2019

Вы связываете SpaceOfWork с новым виджетом, но откуда этот виджет знает вашу модель?Я имею в виду, просто использование data-bind не связывает модель с виджетом, она не может понять это сама.У меня есть два предложения:

  1. Установить значение в инициализации виджета:

    .kendoMultiSelect({
        value: options.model.ScopeOfWork
    

    Демо

  2. Привязка модели к виджету навсегда:

    let $multiSelect = $('<input data-text-field="name" data-value-field="id" data-bind="value:ScopeOfWork"/>');
    
    kendo.bind($multiSelect, options.model);
    
    $multiSelect
        .appendTo(container)
        .kendoMultiSelect({ ...
    

    Демонстрация

Примечание. Отредактируйте ячейку категории вобе демонстрации, чтобы увидеть изменения.

...