Kendo Grid JSON не е последователен

Имам json, който се връща от API, който не е последователен, което означава, че някои записи имат „възраст“, ​​свързана с тях, докато други не.

Опитвам се да попълня Kendo UI Grid, за да покажа/манипулирам данните. За съжаление, когато записите, които нямат свързана с тях „Възраст“, ​​се върнат със записи, които имат, kendo се разпада с грешка: Uncaught ReferenceError: Възрастта не е дефинирана

Ето примера на работещата мрежа: http://jsfiddle.net/tmort/CVkpF/

И ето решетката с един запис, който се връща без „Възраст“: http://jsfiddle.net/tmort/CVkpF/1/ - Можете да видите грешката да се появява в конзолата, а не на самата страница.

Има ли някакъв начин да направя мрежата достатъчно динамична, за да разбера, че възрастта не се е върнала, да я задам на нула и след това да продължа?

Кодът, който използвам:

    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