要进行记录更新,我通常使用CRUD和这样的商店:
storeId: 'storeId',
model: 'model',
pageSize: 10,
autoLoad: true,
proxy: {
type: 'ajax',
actionMethods: {
create: 'POST',
read: 'POST',
update: 'POST',
destroy: 'POST'
},
api: {
create: 'php/crud.php?action=create',
read: 'php/crud.php?action=read',
update: 'php/crud.php?action=update',
destroy: 'php/crud.php?action=destroy'
},
reader: {
type: 'json',
rootProperty: 'net',
totalProperty: 'total',
successProperty: 'success'
},
writer: {
type: 'json',
writeAllFields: true,
encode: true,
rootProperty: 'net'
}
}
更新的逻辑:
var record = form.getRecord();
record.set(values);
store.sync({
success: function () {
},
failure: function () {
},
callback: function () {
},
});
问题:只需更改数据库列的值:YES / NO
我没有使用' destroy'删除记录,而是想通过更新'来禁用它。数据库表列形式NO为YES。
在这种情况下我没有形式;只是一个删除按钮。
我尝试没有成功:
store.proxy.extraParams = {
sub_case: 'change_delete_state',
id_lista: id_lista
},
store.sync({
success: function () {
},
failure: function () {
},
callback: function () {
},
});
和
Ext.Ajax.request({
url: 'php/crud.php?action=update',
params: {
sub_case: 'change_delete_state',
id_lista: id_lista
},
success: function () {
store.commitChanges();
},
failure: function () {
},
callback: function () {
},
});
我很感激解决这个问题的建议。
编辑:
像这样解决:
api: {
destroy: 'php/crud.php?action=destroy'
},
客户端逻辑:
// soft delete
store.proxy.extraParams = {
sub_case: 'change_delete_state',
id_lista: id_lista
},
//or
// hard delete
store.proxy.extraParams = {
id_lista: id_lista
},
store.remove(record);
store.sync({...});
服务器端(PHP):
case "destroy":{
$record = stripslashes($_POST['net']);
$data = json_decode($record);
$id_lista = $data->{'id_lista'};
if($_REQUEST['sub_case'] == "change_delete_state"){
$sqlQuery = "UPDATE ...";
(...)
}else{
$sqlQuery = "DELETE ...";
(...)
}
}
答案 0 :(得分:1)
如果你尽可能地隐藏服务器端的数据库逻辑,你就会很好。
所以,如果你只有一种方法可以摆脱前端的记录,并且记录应该从商店中删除,你只需要用一个特殊的“特殊”商店来交换destroy api。 API:
api: {
create: 'php/crud.php?action=create',
read: 'php/crud.php?action=read',
update: 'php/crud.php?action=update',
destroy: 'php/crud.php?action=hide' // hide the record using a SQL update, and remove it from the client-side store; don't remove from server
},
当然,您必须在crud.php中插入特殊逻辑才能对action=hide
进行特殊处理。
如果你想有两种不同的方式,一种用于“硬删除”,一种用于“软删除”,但两者都应该从商店中删除,事情变得有点复杂。然后,您需要在服务器端处理的记录中使用特殊的布尔“标志”。
E.g。
fields:[{
name:'hardDelete',
type:'bool',
defaultValue:false
}]
然后你会做某事。沿
if(hardDelete) record.set("hardDelete",true);
store.remove(record);
store.sync(
在服务器端,您必须阅读该标志并根据其值进行操作。