LINUX.ORG.RU

EXT JS JsonStore commitChanges()


0

1

Имеется такой код:

<?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 для каждой записи в определённом формате что бы это сделалось автоматически? В таком случае в каком формате?

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.