Question

Je vais avoir un problème de faire mon dojo EnhancedGrid modifiable. À l'heure actuelle, je peux double-cliquer sur les cellules de la grille et je peux changer la valeur, mais je moment, appuyez sur Entrée à nouveau ou essayer de laisser les cellules (c.-à-enregistrer la nouvelle valeur au réseau), j'ai reçu la « affirmation échoué dans ItemFileWriteStore » erreur dans mon firebug.

Voici mon code source:

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

Et voici le contenu de mon movies.json (le contenu des données est bizarre, je sais):

{
    items: 
    [
        {
            title: "Africa",
            year: "continent",
            producer: "Katia Lund"
        },
        {
            title: "Kenya",
            year: "country",
            producer: "Christine Jeffs"
        },
        {
            title: "Mombasa",
            year: "city",
            producer: "Ridley Scott"
        }
    ]
}
Était-ce utile?

La solution

Problème résolu. Avère que je besoin de définir l'attribut « plugins » pour l'objet EnhancedGrid même si elle est juste un objet vide. Une fois qui est défini fonctionne correctement.

Autres conseils

Je pense que le problème est que votre magasin ne contient pas d'identifiant ainsi quand la grille tente d'écrire dans le magasin, il n'a pas aucune façon de savoir quelle entrée il doit écrire.

Je commence en éditant la réponse pour movies.json, peut-être comme ceci:

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

Notez que vous ne devez pas inclure le champ id dans la liste de mise en page, il sera accessible au réseau de toute façon. En outre, comme identifiant implique, il doit être une valeur unique pour chaque élément dans le magasin, sinon il ne parviendra pas à initialiser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top