Ext.grid.EditorGridで表形式編集2
Ext2で試してみました。前の連載よりシンプルにしてあります。
<html>
<head>
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css">
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript" src="adapter/jquery/jquery.js"></script>
<script type="text/javascript" src="adapter/jquery/jquery-plugins.js"></script>
<script type="text/javascript" src="adapter/jquery/ext-jquery-adapter.js"></script>
<script type="text/javascript" src="ext-all.js"></script>
</head>
<body>
<br />
<a href="#" id="recordadd">行追加</a><br />
<a href="#" id="recordput">保存する</a><br />
<br />
<div id="panelgrid"></div>
<script language="JavaScript" type="text/javascript">
var store;
var grid;
$(function(){
//データレコード設定
var record = Ext.data.Record.create([
{name:"data[Doc][id]", type: 'int'},
{name:"data[Article][title]", type: 'string'},
{name:"data[Article][user_id]", type: 'int'},
{name:"data[Article][modified]", type: 'string'}
]);
//サンプルデータ
var myData = [
[1,'title1',10,'2007-1-11 00:01:00'],
[2,'title2',20,'2007-1-12 00:01:00'],
[3,'title3',30,'2007-1-13 00:01:00'],
[4,'title4',40,'2007-1-14 00:01:00'],
[5,'title5',50,'2007-1-15 00:01:00']
];
//データストア
store = new Ext.data.Store({
reader: new Ext.data.ArrayReader({}, record)
});
/*
//JSONでデータを得る場合
var record = Ext.data.Record.create([
{name:"data[Doc][id]", mapping:'Doc.id', type: 'int'},
{name:"data[Article][title]", mapping:'Article.title', type: 'string'},
{name:"data[Article][user_id]", mapping:'Article.user_id', type: 'int'},
{name:"data[Article][modified]", mapping:'Article.modified', type: 'string'}
]);
store = new Ext.data.JsonStore({
url: '', //<<取得元アドレス設定
root: '',
fields: Record
});
*/
//Grid内列設定
var cm = new Ext.grid.ColumnModel([
{header:"id",width:75,dataIndex:'data[Doc][id]'},
{header:"件名",width:75,dataIndex:'data[Article][title]',
editor: new Ext.form.TextField({allowBlank: false})},
{header:"ユーザ",width:75,dataIndex:'data[Article][user_id]'},
{header:"更新日",width:75,dataIndex:'data[Article][modified]'}
]);
//EditorGrid設定
var grid = new Ext.grid.EditorGridPanel({
height:480,
renderTo: 'panelgrid',
cm: cm,
clicksToEdit:1,
store:store,
stripeRows:true
});
store.loadData(myData);
// store.load(); // JSONでデータを得る場合
//新規行追加
$('#recordadd').click(function(){
var rc = new record({
'data[Article][title]': '',
'data[Article][user_id]': '',
'data[Article][modified]': ''
});
grid.stopEditing();
store.insert(0, rc);
grid.startEditing(0, 0);
});
//保存
$('#recordput').click(function(){
//更新行を取得する
var mrs = store.getModifiedRecords();
//更新レコードをループする
$.each(mrs, function(i) {
//idがある場合、アップデート。ない場合、インサートする
if(this.data['data[Doc][id]']) {
$.post("", this.data); //<<保存先アドレス設定
} else {
$.post("", this.data); //<<保存先アドレス設定
}
});
});
});
</script>
</body>
</html>

