Kendo Grid JSON несовместим

У меня есть json, возвращающийся из API, который не является последовательным, что означает, что некоторые записи имеют «возраст», связанный с ними, а другие - нет.

Я пытаюсь заполнить сетку пользовательского интерфейса Kendo, чтобы отображать/манипулировать данными. К сожалению, когда записи, не связанные с «Возрастом», возвращаются вместе с записями, в которых он есть, кендо прерывается с ошибкой: Uncaught ReferenceError: Возраст не определен

Вот пример рабочей сетки: http://jsfiddle.net/tmort/CVkpF/

А вот сетка с возвратом одной записи без "Возраст": http://jsfiddle.net/tmort/CVkpF/1/ — ошибка отображается в консоли, а не на самой странице.

Есть ли способ сделать сетку достаточно динамичной, чтобы понять, что возраст не вернулся, установить для нее значение null, а затем продолжить?

Код, который я использую:

    var data = [
    {
    FirstName: 'John',
    LastName: 'Doe',
    City: 'New York City',
    Title: 'Supervisor',
    BirthDate: '1/1/1975',
    Age: '37',
    },
    {
    FirstName: 'Jane',
    LastName: 'Doe',
    City: 'Buffalo',
    Title: 'Sales Associate',
    BirthDate: '1/1/1980',

    }
    ]
$(document).ready(function() {
        var grid = $("#grid").kendoGrid({
            dataSource: {
                data: data,
                schema: {
                    model: {
                        fields: {
                            FirstName: { type: "string" },
                            LastName: { type: "string" },
                            City: { type: "string" },
                            Title: { type: "string" },
                            BirthDate: { type: "date" },
                            Age: { type: "number" }
                        }
                    }
                },
                pageSize: 10
            },
            height: 500,
            scrollable: true,
            sortable: true,
            selectable: true,
            filterable: true,
            pageable: true,
            columns: [
                {
                    field: "FirstName",
                    title: "First Name"
                },
                {
                    field: "LastName",
                    title: "Last Name"
                },
                {
                    field: "City"
                },
                {
                    field: "Title"
                },
                {
                    field: "BirthDate",
                    title: "Birth Date",
                    template: '#= kendo.toString(BirthDate,"MM/dd/yyyy") #'
                },
                {
                    field: "Age"
                }
            ]
        }).data("kendoGrid");

    });

Любая помощь очень ценится. Спасибо!


person Tom    schedule 29.05.2012    source источник


Ответы (4)


Сетки кендо не поддерживают пропущенные значения. Ваш объект должен содержать каждый член каждой строки, чтобы иметь возможность привязать его к сетке. Пустые/нулевые значения должны быть именно такими — пустыми строками или нулевыми, но они должны существовать в вашем результате JSON.

person Vesselin Obreshkov    schedule 19.07.2012

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

Другие могут иметь лучшее представление о структуре кендо, это просто предложение для быстрого обходного пути!

Надеюсь, поможет!

person Logard    schedule 29.05.2012
comment
Это отличное решение, единственная проблема, которую я вижу, заключается в том, что будет МНОЖЕСТВО переменных полей, поэтому я не смогу предсказать и жестко закодировать их все, чтобы решить проблему. Однако оцените предложение. - person Tom; 29.05.2012

Почему бы не попробовать отправить отсутствующее поле (Возраст) как нулевое. Если вы получаете данные от контроллера, вы можете добавить дополнительное поле и отправить его в пользовательский интерфейс. Это заставит вещи работать должным образом. Просто мое мнение...

person zapper    schedule 14.06.2012

для вас столбцы добавить шаблон с data.field будет работать, т.е.

       ...
       columns: [
            {
                field: "FirstName",
                title: "First Name",
                template: "#= data.FirstName != null ? FirstName : '' #"
            },
            {
                field: "LastName",
                title: "Last Name",
                template: "#= data.LastName != null ? LastName : '' #"
            },
            {
                field: "City",
                template: "#= data.City != null ? City : '' #"
            },
            {
                field: "Title",
                template: "#= data.Title != null ? Title : '' #"
            },
            {
                field: "BirthDate",
                title: "Birth Date",
                template: '#= data.BirthDate != null ? kendo.toString(BirthDate,"MM/dd/yyyy") : "" #'
            },
            {
                field: "Age",
                template: "#= data.Age != null ? Age : '' #"
            }
        ]
        ...
person user2144406    schedule 08.12.2016