我想使用 JSGrid 作为一种从 MySQL 数据库加载数据的方法,以及通过 CakePHP 3 保存(新的或编辑的)多行数据。但是,我不确定如何做到这一点,或者这是否是可能的。
对于加载,如果说我想编辑数据,我想从两个连接的表中获取数据。在 CakePHP 3 中,我会使用 find 检索数据,然后将其设置到视图中,但我不确定如何在加载视图时从那里将其放入 JSGrid。
为了类似地保存,我会保存到两个不同的表中。在 CakePHP 3 中,通常对于多个表,我会使用补丁实体来保存到各个表,并使用 AJAX 将内容保存在另一个页面上,而不是实际在该页面上(每个表的两个添加页面)。但是我不确定您是否可以使用多个数据来做到这一点。
例如。
$.post(".../users/add.json"
给定用户的字段,将执行添加页面通常会执行的操作,并且带有关联表的补丁实体将保存到各种关联表中,但一次只能保存一个。
更新:
我的配置/routes.php:
Router::scope('/', function (RouteBuilder $routes) {
$routes->extensions(['json', 'xml']);
$routes->resources('Instrument');
}
我的观点:
<div id="jsGrid"></div>
<script>
var resources = [];
var instruments = [
{Name: "", Id: 0},
{Name: "Clarinet", Id: 1},
{Name: "Guitar", Id: 2},
{Name: "Piano", Id: 3},
{Name: "Violin", Id: 4},
];
$("#jsGrid").jsGrid({
controller: {
loadData: function (filter) {
return $.ajax({
type: "GET",
url: "<?= $basepath ?>/instrument/view/",
data: filter
});
},
insertItem: function (item) {
return $.ajax({
type: "POST",
url: "<?= $basepath ?>/instrument/add",
data: item
});
},
updateItem: function (item) {
return $.ajax({
type: "PUT",
url: "<?= $basepath ?>/instrument/edit",
data: item
});
},
deleteItem: function (item) {
return $.ajax({
type: "DELETE",
url: "<?= $basepath ?>/instrument/delete",
data: item
});
}
},
width: "100%",
height: "400px",
inserting: true,
editing: true,
sorting: true,
paging: true,
data: resources,
fields: [
{
name: "Instrument",
type: "select",
items: instruments,
valueField: "Id",
textField: "Name",
validate: "required",
width: 175
},
{name: "Comment", type: "text", width: 150},
{type: "control"}
]
});
</script>
<?= $basepath ?>
是在我的 AppController 中设置的变量,这意味着无论项目名称如何,我仍然可以访问 URL。
在视图中,当我尝试保存新行时,添加了该行,但内容为空白。当我尝试编辑一行时,我得到一个“请稍候”,然后什么都没有保存,我仍然可以编辑字段。此外,在控制台中,我收到以下错误:
http://localhost/<?= $basepath ?>/instrument/edit Failed to load resource: net::ERR_CONNECTION_RESET