2014-01-22 5 views
0

Я новичок в 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); 
     } 
    } 

ответ

0

Я думаю, что проблема с вашим обработчиком кнопок Save заключается в том, что вы пытаетесь получить активный редактор для ячейки, но редактор ячейки автоматически удаляется, когда он теряет фокус, поэтому grid.editingPlugin.getActiveEditor() возвращает null.

Хорошая вещь в том, что вы не должны делать это, Ext.grid.plugin.CellEditing автоматически обновляет соответствующий магазин запись для вас, так что все, что вам нужно сделать, чтобы получить все изменения внутри вашего Save обработчика кнопки заключается в следующем:

// Simply use your store method for fetching modified records 
console.log(ds.getModifiedRecords()); 

Если вам нужно что-то сделать после редактирования ячейки, тогда вы должны проверить Ext.grid.plugin.CellEditing edit event.

+0

Спасибо, много работает. Но опять же У меня есть один вопрос. Могу ли я передать модифицированный массив записей в свой сервлет обработки, чтобы избежать запроса ajax для каждой отдельной записи? Если я получу фрагмент кода для этого, тогда все будет хорошо. Еще раз спасибо за ценный комментарий. Я обновлю код выше, чтобы он был полезен другим. – user3224915

+0

@ user3224915 Если я правильно понимаю ваш вопрос, возможно, вам стоит взглянуть на [Ext.JSON.encode] (http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.JSON- метод-encode). Просто закодируйте массив измененных данных, которые вам нужны, передайте это как параметр в ajax-запрос и расшифруйте то, что вы получаете на стороне сервера. – sbgoran

+0

@ user3224915 Возможно, вам также стоит прочитать страницу документа [MVC Architecture] (http://docs.sencha.com/extjs/4.2.2/#!/guide/application_architecture). Обратите особое внимание на раздел «Сохранение сервера». – sbgoran

0

Попробуйте использовать SelectionModel сетке, чтобы получить данные, что-то вроде

var valueList = grid.getSelectionModel().getSelection(); //Returns an array of the currently selected records. 
var value = valueList[0].data.fname; //Should get First Name 
+0

Спасибо, что он также отлично работает. Но опять же У меня есть один вопрос, как я спросил выше. Могу ли я передать модифицированный массив записей в свой сервлет обработки, чтобы избежать запроса ajax для каждой отдельной записи? Если я получу фрагмент кода для этого, тогда все будет хорошо. Еще раз спасибо за ценный комментарий. Я обновлю код выше, чтобы он был полезен другим. – user3224915

Смежные вопросы