我正在使用 DOJO jsonreststore 编写一个 PHP REST API,我知道很多已经在那里,但主要是为了更好地理解这个概念。为了检查结果,我将商店连接到数据网格,除了两件事之外的一切都在工作。
如果我从商店中删除一个项目,它会在数据网格中消失,但如果我在 store._index 中查看 firebug,则删除的项目仍然存在。这可能是因为该视图未更新?
其次是当我发布一个新项目并且后端返回新创建的项目 + 生成的 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);
}