Имеется такой код:
<?php
require_once dirname(dirname(__FILE__))."/config.php";
require_once "$base_dir/models/companies.php";
if (!isset($_SESSION['admin'])) {
header("Location: $www_base/admin/login.php");
exit;
}
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Admin Panel - Manage Companies</title>
<link rel="stylesheet" href="<?php techo("$www_base/css/site.css"); ?>" type="text/css" />
<link rel="stylesheet" type="text/css" href="<?php techo("$www_ext/resources/css/ext-all.css"); ?>" />
<script type="text/javascript" src="<?php techo("$www_ext/adapter/ext/ext-base.js"); ?>"></script>
<script type="text/javascript" src="<?php techo("$www_ext/ext-all-debug.js"); ?>"></script>
<script type="text/javascript">
Ext.BLANK_IMAGE_URL = '<?php techo("$www_ext/resources/images/default/s.gif"); ?>';
</script>
<script type="text/javascript">
Ext.onReady(function () {
var recordFields = [
{ name : 'id', mapping : 'id' },
{ name : 'name', mapping : 'name' },
{ name : 'f_created', mapping : 'f_created' },
];
var remoteJsonStore = new Ext.data.JsonStore({
autoDestroy : true,
autoLoad : false,
url : '<?php techo("$www_base/admin/json/companies.php"); ?>',
storeId : 'ourRemoteStore',
root : 'records',
totalProperty : 'totalCount',
remoteSort : true,
fields : recordFields,
idProperty : 'id',
});
var textFieldEditor = new Ext.form.TextField();
var columnModel = [
{
header : 'Company Name',
dataIndex : 'name',
sortable : true,
editor : textFieldEditor,
},
{
header : 'Created',
dataIndex : 'f_created',
sortable : true,
},
];
var onSave = function () {
var modified = remoteJsonStore.getModifiedRecords();
if (modified.length > 0) {
var recordsToSend = [];
Ext.each(modified, function (record) {
recordsToSend.push(record.data);
});
var grid = Ext.getCmp('myEditorGrid');
grid.el.mask('Updating', 'x-mask-loading');
grid.stopEditing();
recordsToSend = Ext.encode(recordsToSend);
Ext.Ajax.request({
url : '<?php techo("$www_base/admin/json/companies.save.php"); ?>',
params : {
recordsToInsertUpdate : recordsToSend,
},
success : function (response) {
grid.el.unmask();
remoteJsonStore.commitChanges();
},
});
}
}
var onRejectChanges = function () {
remoteJsonStore.rejectChanges();
}
var pagingToolbar = {
xtype : 'paging',
store : remoteJsonStore,
pageSize : 50,
displayInfo : true,
items : [
'-',
{
text : 'Save Changes',
handler : onSave,
},
'-',
{
text : 'Reject Changes',
handler : onRejectChanges,
},
'-',
],
};
var onInsertRecord = function () {
var newRecord = new remoteJsonStore.recordType({
newRecordId : Ext.id(),
});
var grid = Ext.getCmp('myEditorGrid');
var selectedCell = grid.getSelectionModel().getSelectedCell();
var selectedRowIndex = selectedCell[0];
remoteJsonStore.insert(selectedRowIndex, newRecord);
grid.startEditing(selectedRowIndex, 0);
}
var doCellCtxMenu = function (editorGrid, rowIndex, cellIndex, evtObj) {
evtObj.stopEvent();
if (!editorGrid.rowCtxMenu) {
editorGrid.rowCtxMenu = new Ext.menu.Menu({
items : [
{
text : 'Insert Record',
handler : onInsertRecord,
},
// {
// text : 'Delete Record',
// handler : onDeleteRecord,
// },
],
});
}
editorGrid.getSelectionModel().select(rowIndex, cellIndex);
editorGrid.rowCtxMenu.showAt(evtObj.getXY());
}
var grid = {
xtype : 'editorgrid',
columns : columnModel,
id : 'myEditorGrid',
store : remoteJsonStore,
loadMask : true,
bbar : pagingToolbar,
stripeRows : true,
viewConfig : {
forceFit : true,
},
listeners : {
cellcontextmenu : doCellCtxMenu,
},
};
new Ext.Panel({
height : 350,
width : 550,
border : false,
renderTo : Ext.get('companies'),
layout : 'fit',
items : grid,
}).show();
remoteJsonStore.load({
params : {
start : 0,
limit : 50,
},
});
});
</script>
<link rel="stylesheet" type="text/css" href="<?php techo("$www_ext/css/site.css"); ?>" />
<style type="text/css">
.centered_div {
width: 550px;
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<?php $cur_item = 'companies'; include 'menu.php'; ?>
<h1 align="center">Manage Companies</h1>
<div id="companies" class="centered_div"></div>
</body>
</html>
В случае если сервер возвращает «{ success : true }» он делает remoteJsonStore.commitChanges(). Это обновляет все изменённые/добавленные записи в editGrid. Что если сервер смог обновить некоторые записи а некоторые нет (напр. значения для них были не корректными и т.д.). Как сделать commitChanges() только для тех записей которые удалось обновить а для других remoteJsonStore.rejectChanges() ? Или может быть сервер должен вернуть success : false/true для каждой записи в определённом формате что бы это сделалось автоматически? В таком случае в каком формате?