2013-03-16 23 views
6

Ben Seçili satırı almaya çalışırken aşağıdaki hatayı alıyorum Seçilmiş Başlarken:ExtJS Izgara Satırı Sil - Satırı

Uncaught TypeError: Object #<HTMLDivElement> has no method 'getView' 

Ben dolayısıyla görünümü ve alamayan zaman güncel Seçili satırı nasıl alabilirim SelectionModel?

Benim Görünüm Kodu:

Ext.define('MyLodge.view.content.MemberGrid', { 
extend: 'Ext.grid.Panel', 
alias: 'widget.membergrid', 



initComponent: function(){ 

    var rowEditing = Ext.create('Ext.grid.plugin.RowEditing'); 

    var store = Ext.create('MyLodge.store.Members'); 

    Ext.apply(this, { 
     height: this.height, 
     plugins: [rowEditing], 
     store: store, 
     stripeRows: true, 
     columnLines: true, 
     columns: [{ 
      id  :'id', 
      text: 'ID', 
      width: 40, 
      sortable: true, 
      dataIndex: 'id' 
     },{ 
      text : 'Name', 
      flex: 1, 
      sortable : true, 
      dataIndex: 'name', 
      field: { 
       xtype: 'textfield' 
      } 
     },{ 
      text : 'E-Mail', 
      width : 150, 
      sortable : true, 
      dataIndex: 'email', 
      field: { 
       xtype: 'textfield' 
      } 
     },{ 
      text : 'Href', 
      width : 200, 
      editable: false, 
      sortable : true, 
      dataIndex: 'href' 
     }], 
     dockedItems: [{ 
      xtype: 'toolbar', 
      items: [{ 
       text: 'Add', 
       iconCls: 'icon-add', 
       handler: function(){ 
        // empty record 
        store.insert(0, new MyLodge.model.Member()); 
        rowEditing.startEdit(0, 0); 
       } 
      }, { 
       text: 'Delete', 
       iconCls: 'icon-delete', 
       handler: function(){ 
        var selection = grid.getView().getSelectionModel().getSelection()[0]; 
        if (selection) { 
         store.remove(selection); 
        } 
       } 
      },'-',{ 
       text: 'Save', 
       iconCls: 'icon-save', 
       handler: function(){ 
        store.sync({ 
         success: function(response){ 
          store.load() 
         } 
        }); 

       } 
      },{ 
       text: 'Refresh', 
       handler: function(){ 
        store.load(); 
       } 
      }] 
     }] 
    }); 

    this.callParent(arguments); 
    } 
}); 

cevap

9

Seçeneklerden biri bir değişken olarak kapatılmasına scope ekleyerek olurdu İşleyicinizde, me numaralı kılavuza başvurabilirsiniz:

{ 
    text: 'Delete', 
    iconCls: 'icon - delete ', 
    handler: function() { 
     var selection = me.getView().getSelectionModel().getSelection()[0]; 
     if (selection) { 
      store.remove(selection); 
     } 
    } 
} 

Çalışma örneği:http://jsfiddle.net/Sn4fC/


İkinci bir seçenek yerine handler bir clicklistener ayarlanması ve scope belirterek edilebilir:

{ 
    text: 'Delete', 
    iconCls: 'icon - delete ', 
    listeners: { 
     click: { 
      scope: this, 
      fn: function() { 
       var selection = this.getView().getSelectionModel().getSelection()[0]; 
       if (selection) { 
        store.remove(selection); 
       } 
      } 
     } 
    } 
} 

Çalışma örneği:http://jsfiddle.net/XyBbF/

1

konu 'grid' işleyici işlevi kapsamında mevcut değil veya aslında olmasını umduğum bir olmadığıdır.

handler: function(){ 
     //.... keep the debug point here in browser developer tool and verify the value of grid in console. It is definitely not an instance of the grid u expected hence it wont have getView() method. 
     var selection = grid.getView().getSelectionModel().getSelection()[0]; 

} 

ızgaranın referans alma deneyin ve aşağıda gösterildiği gibi işleyicisi kullanmak:

initComponent: function() { 
    var me = this; 
    . 
    . 

:

Ext.define('MyLodge.view.content.MemberGrid', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.membergrid', 
    id: 'membergrid', 
    ...... 

handler: function(){ 
    var grid = Ext.getCmp('membergrid'); // where 'membergrid' is the id defined in grid config 
    var selection = grid.getView()...... 
+0

CD..Kullanıcının cevabı benimkinden mükemmel! – Srikanth

+0

Cevabınız çalışıyor olabilir, ancak [jsfiddle] (http://jsfiddle.net) üzerinden örnek vermek çok daha iyidir. –