Code:
Ext.require(['Ext.data.*', 'Ext.grid.*']);
Ext.define('Document', {
extend: 'Ext.data.Model',
fields: [
{
name: 'id',
type: 'int',
useNull: true,
},
{
name: 'name',
type: 'text',
useNull: 'true',
},
]
});
Ext.onReady(function(){
var writer = new Ext.data.writer.Json();
var reader = new Ext.data.JsonReader({
type: 'json',
root: 'items',
totalProperty : 'total',
successProperty: 'success'
});
var store = Ext.create('Ext.data.Store', {
autoLoad: true,
autoSync: true,
remoteSort: true,
model: 'Document',
proxy: {
type: 'rest',
url: '/api/rest/documents',
headers: {
'Accept' : 'application/json'
},
reader: reader,
writer: writer,
}
});
var bbar = new Ext.PagingToolbar({
//pageSize: 10,
store: store
});
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
var grid = Ext.create('Ext.grid.Panel', {
renderTo: 'documents-grid',
plugins: [rowEditing],
width: 400,
height: 300,
frame: true,
title: 'Documents',
store: store,
iconCls: 'icon-user',
bbar: bbar,
columns: [
{
text: 'ID',
width: 40,
sortable: true,
dataIndex: 'id',
renderer: function(v){
if (Ext.isEmpty(v)) {
v = ' '
}
return v;
}
},
{
text: 'Name',
flex: 1,
sortable: true,
dataIndex: 'name',
field: {
xtype: 'textfield'
}
},
],
dockedItems: [{
xtype: 'toolbar',
items: [{
text: 'Add',
iconCls: 'icon-add',
handler: function(){
// empty record
store.insert(0, new Document());
rowEditing.startEdit(0, 0);
}
}, '-', {
text: 'Delete',
iconCls: 'icon-delete',
handler: function(){
var selection = grid.getView().getSelectionModel().getSelection()[0];
if (selection) {
store.remove(selection);
}
}
}]
}]
});
});