Pourquoi la grille de dojo a-t-elle besoin d'une colonne de nom dans la source de données json?
-
03-07-2019 - |
Question
Dans l'exemple suivant, les données ne sont affichées dans la grille que si les données json contiennent une colonne de nom - > la première grille montre les données, la seconde non.
Pourquoi est-ce le cas?
index.html: grille de dojo
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dijit/themes/tundra/tundra.css" />
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/resources/dojo.css" />
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojox/grid/_grid/tundraGrid.css">
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js"
djConfig="parseOnLoad: true, isDebug: true">
</script>
<script type="text/javascript">
dojo.require("dojo.parser");
dojo.require("dojox.grid.Grid");
dojo.require("dojo.data.ItemFileReadStore");
</script>
</head>
<body class="tundra">
<span dojoType="dojo.data.ItemFileReadStore"
jsId="withNameStore"
url="WithNameColumn.json"
clearOnClose="true">
</span>
<table id="withNameGrid"
dojoType="dojox.grid.Grid"
store="withNameStore"
clientSort="true"
style="width: 20em; height: 20em;">
<thead>
<tr>
<th field="ID" >ID</th>
<th field="test">Test</th>
</tr>
</thead>
</table>
<span dojoType="dojo.data.ItemFileReadStore"
jsId="withoutNameStore"
url="WithoutNameColumn.json"
clearOnClose="true">
</span>
<table id="withoutNameGrid"
dojoType="dojox.grid.Grid"
store="withoutNameStore"
clientSort="true"
style="width: 20em; height: 20em;">
<thead>
<tr>
<th field="ID" >ID</th>
<th field="test">Test</th>
</tr>
</thead>
</table>
</body>
</html>
WithNameColumn.json:
{
"identifier":"ID",
"label":"test",
"items":
[{"ID":2,"name":"name1","test":"dog"},
{"ID":3,"name":"name2","test":"cat"},
{"ID":4,"name":"name3","test":"mouse"}]
}
WithoutNameColumn.json:
{
"identifier":"ID",
"label":"test",
"items":
[{"ID":2,"test":"dog"},
{"ID":3,"test":"cat"},
{"ID":4,"test":"mouse"}]
}
La solution
Ajoutez simplement un attribut de requête à votre élément. Comme ceci:
< table query = " {ID: '*'} " ... >
Cela est dû au fait que cela effectuera une requête lors de la demande de données du magasin de données
Autres conseils
Nom n'est pas nécessaire vous avez cependant besoin d'une carte entre la propriété dans le magasin de données et le nom de la colonne dans le la grille. Ceci est fait lors de la définition de la grille 'Layout' la propriété 'field' dans le 'Layout' est le nom de la colonne dans le magasin de données (le nom de la propriété doit être exacte) et la propriété 'name' dans le 'Layout' est le nom de la colonne dans la grille.
gridLayout = [{
defaultCell: { width: 8, editable: true, type: dojox.grid.cells._Widget, styles: 'text-align: right;' },
rows: [
{ name: 'Id', field: 'id', editable: false /* Can't edit ID's of dojo.data items */ },
{ name: 'Date', field: 'col8', width: 10,
type: dojox.grid.cells.DateTextBox,
formatter: formatDate,
constraint: {formatLength: 'long', selector: "date"}},
{ name: 'Priority', styles: 'text-align: center;', field: 'col1',
type: dojox.grid.cells.ComboBox,
options: ["normal", "note", "important"], width: 10},
{ name: 'Mark', field: 'col2', width: 3, styles: 'text-align: center;',
type: dojox.grid.cells.CheckBox},
statusCell,
{ name: 'Message', field: 'col4', styles: '', width: 10,
type: dojox.grid.cells.Editor, editorToolbar: true },
{ name: 'Amount', field: 'col5', formatter: formatCurrency, constraint: {currency: 'EUR'},
widgetClass: dijit.form.CurrencyTextBox },
{ name: 'Amount', field: 'col5', formatter: formatCurrency, constraint: {currency: 'EUR'},
widgetClass: dijit.form.HorizontalSlider, width: 10}
]
}];