Вопрос

У меня проблема с созданием моей додзё EnhancedGrid редактируемые. В настоящее время я могу дважды щелкнуть к ячейкам сетки, и я могу изменить значение, но в тот момент, когда я нажимаю в Enter еще раз, или попробуйте покинуть ячейки (т. Е. Для сохранения нового значения к сетке), я получил «Утверждение не удалось в ItemfileWriteStore» Ошибка в моем Firebug.

Ниже мой исходный код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
    <style type="text/css">
        body, html { font-family:helvetica,arial,sans-serif; font-size:90%; }
    </style>
    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css" />
    <style type="text/css">
        @import "http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojox/grid/resources/Grid.css";
        @import "http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojox/grid/resources/claroGrid.css";
        .dojoxGrid table { margin: 0; }
    </style>
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js" djConfig="parseOnLoad: true">
    </script>

    <script type="text/javascript">
        dojo.require("dojox.grid.EnhancedGrid");
        dojo.require("dojo.data.ItemFileWriteStore");
        dojo.require("dojox.grid.cells._base");

        dojo.addOnLoad(function() {

            var layoutabc = 
            [[
                {
                    field: "title",
                    name: "TitleofMovie",
                    width: "300px",
                    editable: true
                },
                {
                    field: "year",
                    name: "Year",
                    width: "200px",
                    editable: true
                },
                {
                    field: "producer",
                    name: "Producer",
                    width: "auto",
                    editable: true,
                    type: dojox.grid.cells.Cell
                }
            ]];


            var mystore = new dojo.data.ItemFileWriteStore({
                url: "movies.json"
            });

            // create a new grid:
            var grid = new dojox.grid.EnhancedGrid(
                {
                    query: {},
                    store: mystore,
                    structure: layoutabc
                },
                document.createElement("div")
            );
            dojo.byId("gridDiv").appendChild(grid.domNode);

            grid.startup();
        });
    </script>
</head>

<body class="claro">
    <div id="gridDiv" style="width: 800px; height: 400px;">
    </div>
</body>

И это содержание моих фильмов.json (Содержание данных странно, я знаю):

{
    items: 
    [
        {
            title: "Africa",
            year: "continent",
            producer: "Katia Lund"
        },
        {
            title: "Kenya",
            year: "country",
            producer: "Christine Jeffs"
        },
        {
            title: "Mombasa",
            year: "city",
            producer: "Ridley Scott"
        }
    ]
}
Это было полезно?

Решение

Проблема решена. Оказывается, мне нужно определить атрибут «Плагинов» для объекта ELESHANCENGRID, даже если это просто пустой объект. Как только это определено, это работает правильно.

Другие советы

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

Я бы начал с редактирования ответа на фильмы.json, возможно, это:

{
    identifier:"id",
    items: 
    [
        {
            id:1
            title: "Africa",
            year: "continent",
            producer: "Katia Lund"
        },
        {
            id:2
            title: "Kenya",
            year: "country",
            producer: "Christine Jeffs"
        },
        {
            id:3
            title: "Mombasa",
            year: "city",
            producer: "Ridley Scott"
        }
    ]
}

Обратите внимание, что вам не нужно включать поле ID в списке макета, он все равно будет доступен в сетке. Также, как подразумевает идентификатор, он должен быть уникальным значением для каждого элемента в магазине, в противном случае он не сможет инициализировать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top