Pregunta

Estoy teniendo un problema con la fabricación de mi dojo EnhancedGrid editable. Actualmente, puedo hacer doble clic en las celdas de la cuadrícula y puedo cambiar el valor, pero el que la prensa momento introducir de nuevo o tratar de salir de las células (es decir, para guardar el nuevo valor a la red), recibí la "afirmación fracasado en ItemFileWriteStore" error en mi incendiario.

A continuación se muestra el código fuente:

<!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>

Y este es el contenido de mi movies.json (el contenido de los datos es raro, lo sé):

{
    items: 
    [
        {
            title: "Africa",
            year: "continent",
            producer: "Katia Lund"
        },
        {
            title: "Kenya",
            year: "country",
            producer: "Christine Jeffs"
        },
        {
            title: "Mombasa",
            year: "city",
            producer: "Ridley Scott"
        }
    ]
}
¿Fue útil?

Solución

Problema resuelto. Resulta que necesitan para definir el atributo "plugins" para el objeto EnhancedGrid a pesar de que es sólo un objeto vacío. Una vez que se define funciona correctamente.

Otros consejos

Creo que el problema es que su tienda no contiene ningún identificador de modo que cuando los intentos de cuadrícula para escribir a la tienda, que no tiene manera de saber qué entrada se debe escribir.

Yo empezaría editando la respuesta de movies.json, tal como esto:

{
    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"
        }
    ]
}

Tenga en cuenta que no tiene que incluir el campo id en la lista Diseño, que se podrá acceder a la red de todos modos. También, como identificador implica, debe ser un valor único para cada artículo en la tienda, de lo contrario se producirá un error al inicializar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top