Я новичок в ext js и хотел сделать несколько POC для Grid. Мне нужно прочитать данные из базы данных oracle и щелкнуть на редакторе updater, а затем получить это обновление, а затем передать его сервлету для редактирования.Невозможно прочитать отредактированные данные в extjs Grid
Я до тех пор, пока не получаю данные из базы данных, но теперь не могу использовать, поскольку не получаю, как получать обновленные данные и передавать их сервлету.
Пожалуйста, найти свой код для Грид -
Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.util.*',
'Ext.state.*'
]);
// Define Person entity
// Null out built in convert functions for performance *because the raw data
Ext.onReady(function() {
Ext.QuickTips.init();
// setup the state provider, all state information will be saved to a cookie
Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));
Ext.define('person', {
extend: 'Ext.data.Model',
fields: [
{name: 'sso', type: 'string'},
{name: 'fname', type: 'string'},
{name: 'lname', type: 'string'},
{name: 'msso', type: 'string'},
{name: 'email_address', type: 'string'},
{name: 'person_status', type: 'string'}
]
});
var ds = new Ext.data.Store({
model:'person',
autoLoad: true,
//url:'/FormAction',
actionMethods: {create: "POST", read: "POST", update: "POST", destroy: "POST"},
proxy: {
type: 'ajax',
url: '/identityiq/FormAction',
reader: {
type: 'xml',
record: 'record'
},
}
});
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
});
// create the Grid
var grid = Ext.create('Ext.grid.Panel', {
store: ds,
columns: [
{
text : 'SSO',
width:80,
sortable : true,
dataIndex: 'sso'
},
{
id: 'fname',
header: 'First Name',
dataIndex: 'fname',
width:80,
flex: 1,
field: {
allowBlank: false
}
},
{
id: 'lname',
header : 'Last Name',
width:80,
sortable : true,
dataIndex: 'lname',
field: {
allowBlank: false
}
},
{
text : 'Manager SSO',
width : 80,
sortable : true,
dataIndex: 'msso'
},
{
text : 'Email Address',
width : 80,
sortable : true,
dataIndex: 'email_address'
},
{
text : 'Personstatus',
width : 35,
sortable : true,
dataIndex: 'person_status'
}
],
selModel: {
selType: 'cellmodel'
},
height: 350,
width: 600,
title: 'Array Grid',
renderTo: 'myDiv',
viewConfig: {
stripeRows: true,
enableTextSelection: true
},
frame: true,
tbar: [
{
text: 'Save',
handler: function()
{
// myGrid is a reference to your Ext.grid.Panel instance
if (grid.editingPlugin.editing) {
var value = grid.editingPlugin.getActiveEditor().field.value;
alert('Value: ' + value);
}
}
}
],
plugins: [cellEditing]
});
});
- в этом коде я получаю ошибку, что TypeError: grid.editingPlugin.getActiveEditor (...) является нулевым
Запрос Вас ответьте на это, поскольку я застрял и вам нужно представить этот POC.
Спасибо, Ashwini
В соответствии с ответом ниже следующий код работает отлично, если я заменить сохранить Handler -
handler: function()
{
alert(ds.getModifiedRecords());
console.log(ds.getModifiedRecords());
var modified_data ={};
modified_data = ds.getModifiedRecords();
for (var i = 0; i < modified_data.length; i++) {
var record = modified_data[i];
alert(record.data.fname);
}
}
Спасибо, много работает. Но опять же У меня есть один вопрос. Могу ли я передать модифицированный массив записей в свой сервлет обработки, чтобы избежать запроса ajax для каждой отдельной записи? Если я получу фрагмент кода для этого, тогда все будет хорошо. Еще раз спасибо за ценный комментарий. Я обновлю код выше, чтобы он был полезен другим. – user3224915
@ user3224915 Если я правильно понимаю ваш вопрос, возможно, вам стоит взглянуть на [Ext.JSON.encode] (http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.JSON- метод-encode). Просто закодируйте массив измененных данных, которые вам нужны, передайте это как параметр в ajax-запрос и расшифруйте то, что вы получаете на стороне сервера. – sbgoran
@ user3224915 Возможно, вам также стоит прочитать страницу документа [MVC Architecture] (http://docs.sencha.com/extjs/4.2.2/#!/guide/application_architecture). Обратите особое внимание на раздел «Сохранение сервера». – sbgoran