私は DOJO jsonreststore を使用して PHP REST API を作成しています。すでに多くの API が出回っていることは知っていますが、主に概念をよく理解するためのものです。結果を確認するために、ストアをデータグリッドに接続しましたが、2 つを除いてすべてが機能しています。
ストアから項目を削除すると、データグリッドで消えますが、store._index で firebug を調べると、削除された項目がまだ残っています。これは、そのビューが更新されていないためでしょうか?
2 つ目は、新しいアイテムを投稿すると、バックエンドが新しく作成されたアイテム + 生成された ID を返すときです。データグリッドは、新しく生成された ID なしで新しい行のみで更新されます。store._index の firebug を見ると、期待どおりに新しく作成された ID を持つアイテムが表示されますが、クライアント側で生成された ID を持つアイテムがまだ残っています。データグリッドは、サーバー側で生成された ID のないオブジェクトを表示しています。
しかし、ここで立ち往生しています、何か考えはありますか?
以下にいくつかのコードを投稿しました:
アイテムの追加:
dojo.connect(dijit.byId("addLocation"), "onClick", function() {
var Location = locationStore.getConstructor();
var location = new Location();
location.name = "TESTLOC"
location.description = "TESTDESC"
location.company = "1"
location.companyname = "TEST"
locationStore.save();
});
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$putvars = json_decode(file_get_contents("php://input"));
$location = new Location();
$location->setCompany($putvars->company);
$location->setCompanyName($putvars->companyname);
$location->setDescription($putvars->description);
$location->setId(14);
$location->setName($putvars->name);
header("HTTP/1.0 201 Created", true, 201);
header("Location: http://localhost/resttest/location/" . 14);
echo $location->toJSON();
}
アイテムを削除しています:
dojo.connect(dijit.byId("deleteLocation"), "onClick", function() {
var location = locationGrid.getItem(0);
locationStore.deleteItem(location);
locationStore.save();
});
if ($_SERVER['REQUEST_METHOD'] == "DELETE") {
$uri = explode("/",$_SERVER['REQUEST_URI']);
$locationId = $uri[count($uri)-1];
header("HTTP/1.0 204 OK", true, 204);
}