2011-10-22 1 views
0

열의 콤보 박스가있는 격자 패널의 행 색인을 찾고 상점/데이터베이스 및 아약스 프록시를 업데이트하는 데 사용됩니까? Ext.grid.plugin.CellEditing을 사용하고 있습니다. 여기 내 코드가있다. 그것을 주셔서 감사합니다!격자판에서 행 ID 찾기

Ext.Loader.setConfig({ 
    enabled: true 
}); 
Ext.Loader.setPath('Ext.ux', '/extjs4/examples/ux'); 
Ext.require([ 
    'Ext.layout.container.Fit', 
    'Ext.grid.*', 
    'Ext.data.*', 
    'Ext.util.*', 
    'Ext.panel.*', 
    'Ext.selection.CellModel', 
    'Ext.state.*', 
    'Ext.form.*', 
    'Ext.ux.CheckColumn' 
]); 
Ext.define('Ext.app.HirePlanGrid', { 
    extend: 'Ext.panel.Panel', 
    alias: 'widget.hirePlangrid' 
    ,hireplanstoreId: 'hireplanstore' 
,hiremonthstoreId: 'hiremonthstore' 
    ,renderMonth : function (value, p, record) { 
     var fkStore = Ext.getStore(this.up('hirePlangrid').hiremonthstoreId); 
     var rec = fkStore.findRecord("MONTH_ID", value); 
     //return rec.get("ABBREVIATED_MONTH"); 
    } 
    ,initComponent: function() { 
     this.editing = Ext.create('Ext.grid.plugin.CellEditing', { 
      clicksToEdit: 2 
     }); 

     var objMonthStore = Ext.getStore(this.hiremonthstoreId); 
     objMonthStore.load(); 

     var objStore = Ext.getStore(this.hireplanstoreId); 
     objStore.setProxy({ 
      type: 'ajax', 
      url: 'hireplan.cfc?method=getEmployees' 
     }); 

     objStore.load(); 
     var onDeleteClick = function(field, value, options) {  
      // var objPanel = this.down('gridpanel'); 
      var selection = Ext.getCmp('grid').getSelectionModel().getSelection(); 
      alert(selection); 
      // var selection = getView().getSelectionModel().getSelection()[r]; 
      if (value) { 
       alert(value); 
       objStore.remove(value); 
       objStore.sync(); 
      } 
     }; 
     var onUpdateClick = function(field, value, options) {   
      alert('field= ' + field + ' value= '+ value+ 'options= '+ options); 
      objStore.update(objStore.getAt(value)); 
      onSync(); 
     }; 
     Ext.apply(this, { 
      layout: 'fit', 
      width: 800, 
      //height: 1500, 
      items: [{ 
       xtype: 'grid', 
       id : 'gridgrid', 
       //height: 300, 
       store: objStore, 
       selModel: { selType: 'cellmodel' }, 
       selType : 'rowmodel', 
       plugins: [this.editing], 
       // plugins: [cellEditing], 
       columnLines: true, 
       viewConfig: {stripeRows: true}, 
       //loadMask: true, 
       disableSelection: true, 
       listeners: { 
        selectionchange: function(selModel, selected) { 
         var selection = Ext.getCmp('gridgrid').getSelectionModel().getSelection(); 
        } 
       }, 
       columns: [ 
        { header: 'rowid', hidden: true, dataIndex: 'ROWID'}, 
        { 
         header: 'Indicator', 
         id: 'chkcolumn', 
         xtype: 'checkcolumn', 
         dataIndex: 'CHK_COL', 
         editor: { 
          xtype: 'checkbox', 
          cls: 'x-grid-checkheader-editor' 
         }, 
         listeners : checkchange : function(column, recordIndex, checked) 
         { 
          alert('checked rindex= ' + recordIndex); 
          onDeleteClick(column, recordIndex, checked); 
          //or send a request      
         } 
        } 
       },     
       { 
        id: 'employeeid', 
        header: 'employeeid',      
        width: 80, 
        hidden: false, 
        sortable: true, 
        dataIndex: 'EMPLOYEEID', 
        flex: 1 
       }, 
       { 
        id: 'NATIONALIDNUMBER', 
        header: 'NATIONALIDNUMBER', 
        width: 80, 
        sortable: true, 
        dataIndex: 'NATIONALIDNUMBER', 
        flex: 1 
       }, 
       { 
        id: 'MARITALSTATUS', 
        header: 'MARITALSTATUS', 
        width: 80, 
        sortable: true,      
        dataIndex: 'MARITALSTATUS', 
        flex: 1 
       }, 
       { 
        id: 'PotentialforInsourcingKV', 
        header: 'Potential for Insourcing', 
        width: 30, 
        sortable: true,      
        dataIndex: 'POTENTIAL_FOR_INSOURCING', 
        flex: 1, 
        editor: { 
        id: 'thiscombo', 
        xtype: 'combobox', 
        typeAhead: true, 
        triggerAction: 'all', 
        selectOnTab: true, 
        store: [ 
         ['1', 'Yes'], 
         ['0', 'No'] 
        ], 
        lazyRender: true, 
        listClass: 'x-combo-list-small', 
        listeners: { 'select' : function(r){ 
        var selval = Ext.getCmp("thiscombo").getValue(); 
        //var recval = Ext.getCmp("grid").getValue(); 
        //var selection = getView().getSelectionModel().getSelection()[r] 
        alert(selval + ' ' + rowIdx); 
        // onUpdateClick(editor, rowIdx, value); 
       } 
      }, 
     } 
    }, 
    { 
     id: 'ABBREVIATED_MONTH', 
     header: 'ABBREVIATED_MONTH', 
     width: 80, 
     sortable: true, 
     dataIndex: 'ABBREVIATED_MONTH', 
     flex: 1, 
     renderer: this.renderMonth, 
     field: { 
      xtype: 'combobox', 
      store: Ext.getStore(this.hiremonthstoreId), 
      typeAhead: true, 
      lazyRender: true, 
      queryMode: 'local', 
      displayField: 'ABBREVIATED_MONTH', 
      valueField: 'MONTH_ID', 
      listClass: 'x-combo-list-small' 
     } 
    }, 
    { 
     id: 'SALARIEDFLAG', 
     header: 'SALARIEDFLAG', 
     width: 80, 
     sortable: true,      
     dataIndex: 'SALARIEDFLAG', 
     flex: 1 
    }], 
    features: [{ 
     ftype: 'rowbody' 
    }] 
}] 
}); 
this.callParent(arguments); 
//this.getSelectionModel().on('selectionchange', this.onSelectChange, this); 
}, //initComponent 
getSelectedRowIndex : function(){ 
    var r, s; 
    r = this.getView().getSelectionModel().getSelection(); 
    s = this.getStore(); 
    return s.indexOf(r[0]); 
}, 
onSelectChange: function(selModel, selections){ 
    this.down('#delete').setDisabled(selections.length === 0); 
}, 
onSync: function() { 
    objStore.sync(); 
}, 
viewConfig: {}, 
}); 
+1

코드를 공유하면 도움이되므로 도움을받을 수 있습니다. 어쨌든 항상'CellEditing'의'edit' 이벤트에 이벤트 훅을 추가 할 수 있습니다. EventObject에는'rowIdx' 속성이 있습니다. 그러나이 모든 것은 코드에 따라 다릅니다. 가능한 옵션 중 하나 일뿐입니다. –

+0

코드를 포맷하는 동안 중괄호가 일치하지 않는 것을 발견했습니다. 이 라인과 같은 다른 에러들 :'listener : checkchange : function (column, recordIndex, checked)'. 먼저 코드를 정리하십시오. – suknic

+0

믿거 나 말거나, "listers : checkchange : function (column, recordIndex, checked)"실제로 작동합니다. 나는 내가 괄호에 대해 할 수있는 것을 보게 될 것이다 ... 그것을 보아 주셔서 감사합니다! – user997117

답변

0

나는 내가 무엇을 할 필요하면 행 인덱스를 찾을 수 this.cellediting하고 'beforeedit'이벤트를 사용하기위한 청취자를 추가합니다 것을 다른 게시물에 읽은 다음 변수로 설정 :

var rIdx = ''; 
    var cIdx = '';  
    this.cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { 
      clicksToEdit: 1, 
    listeners: { 
    'beforeedit': function(e){ 
    var me = this; 
    var allowed = !!me.isEditAllowed; 
    if (!me.isEditAllowed) 
    Ext.Msg.confirm('confirm', 'Are you sure you want edit?', function(btn){ 
         if (btn !== 'yes') 
          return; 
         me.isEditAllowed = true; 
         me.startEditByPosition({ 
          row: e.rowIdx, 
          column: e.colIdx 
         });   
        }); 
       rIdx = e.rowIdx; 
       cIdx = e.colIdx; 
       alert('rIdx= ' + rIdx + ' cIdx = ' + cIdx); 
       return allowed; 
      }, 
      'edit': function(e){ 
       this.isEditAllowed = true; 
    } 
    } 
    });