Dojoはグリッドの編集可能な問題を強化します
-
09-10-2019 - |
質問
Dojo 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"
}
]
}
解決
問題が解決しました。空のオブジェクトであるにもかかわらず、拡張グリッドオブジェクトの「プラグイン」属性を定義する必要があることがわかります。それが定義されると、適切に機能します。
他のヒント
問題は、あなたの店に識別子が含まれていないので、グリッドが店に書き込もうとするとき、どのエントリに書き込むべきかを知る方法がないことだと思います。
私はムービーの応答を編集することから始めます。
{
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フィールドを含める必要がないことに注意してください。とにかくグリッドにアクセスできます。また、識別子が示唆するように、それは店内の各アイテムの一意の値でなければなりません。そうしないと、初期化に失敗します。
所属していません StackOverflow