extjs关于获取被选取的record的id的问题

一个关于获取record的id 的问题,请看下面删除的函数deleteUser
[code="java"]UserList = Ext.extend(Ext.Panel, {
layout: 'fit',
autoWidth: true,
store: 'UserStore',
initComponent: function() {

    this.items = [
        {
            xtype: 'editorgrid',
            id:'grid_id',
            store: 'UserStore',
            border: false,
            loadMask: true,
            view: new Ext.grid.GridView({forceFit:true}),
            selModel: new Ext.grid.CheckboxSelectionModel({width:20}),
            columns: [new Ext.grid.RowNumberer({width: 30}),
                {
                    xtype: 'gridcolumn',
                    header: '姓名',
                    sortable: true,
                    dataIndex: 'name',
                    width: 100,
                    editor: {xtype: 'textfield'}
                },
                {
                    xtype: 'gridcolumn',
                    header: '电子邮箱',
                    sortable: true,
                    dataIndex: 'email',
                    width: 150,
                     editor: {xtype: 'textfield'}
                },
                {
                    xtype: 'gridcolumn',
                    header: '用户名',
                    sortable: true,
                    dataIndex: 'username',
                    editable:false,
                    width: 100,
                    editor: {xtype: 'textfield'}
                },
                {
                    xtype: 'booleancolumn',
                    dataIndex: 'enable',
                    header: '可用',
                    sortable: true,
                    width: 100,

                    editor: {
                        xtype: 'checkbox',
                        boxLabel: '是否可用'
                    }
                }
            ]
        }
    ];
    this.bbar = {
        xtype: 'paging',
        pageSize: 10,
        store: 'UserStore',

        displayInfo: true,
        displayMsg: '显示第{0}条到{1}条记录,一共{2}条',
        emptyMsg:'没有记录',
        items: [
            {
                xtype: 'button',
                text: '提交更新',
                handler:this.saveUser                       
            }
        ]
    };
    this.tbar = {
        xtype: 'toolbar',
        items: [
            {
                xtype: 'tbfill'
            },
            {
                xtype: 'tbseparator'
            },
            {
                xtype: 'button',
                id: 'deleteUser',
                text: '删除',
                handler:this.deleteUser              

            },
            {
                xtype: 'tbseparator'
            }
        ]
    };

    UserList.superclass.initComponent.call(this);

},

   deleteUser :function() {

var userIds = Ext.getCmp("grid_id").selModel.selections.keys;
   //问题出在这里:我想获取被选取的record的id,但获得的Id值如ext-record-21,ext-record-22....
   // 看网上好多人用var userIds = this.selModel.selections.keys,在这里我不行,所以用getCmp来获取表格对象,可能是这个的问题,但不确定。请高手可以帮忙看一下,谢谢,

     if (userIds.length <= 0) {
        Ext.MessageBox.alert('提示', '请选择要删除的数据');
        return;
    }
    var submitFun = function(buttonId, text, opt) {
        if (buttonId == 'yes') {
            micrite.util.ajaxRequest({
                url: 'DeleteUser.action',
                params:{'userIds':userIds},
                success:function(r,o){
                    //var res = Ext.decode(r.responseText);
                    //if (res && res.success){
                        this.store.reload();
                    //}
                },
                failure:Ext.emptyFn
            },this);
        }
    };
    Ext.Msg.show({
        title:'删除操作',
        msg: '是否删除',
        buttons: Ext.Msg.YESNO,
        scope: this,
        fn: submitFun
        //icon: Ext.MessageBox.QUESTION
    });
},
[/code]

看你的代码应该是一次删除多行:
首先应取到所选中的行:
var m = this.grid.getSelections();
var store = this.ds;
其次再在ajax中,对所选的行在页面删除,并在后台进行删除操作:
......
var userIds = "";
for (var i = 0, len = m.length;i < len; i++){
var ss = m[i].get("grid_id");
userIds = jsonData + ss + ",";
store.remove(m[i]);
}
........
url: 'DeleteUser.action',

params:{'userIds':userIds},
...........
如果是删除一行,那就直接取即可:
var userIds = this.grid.getSelections().get("grid_id");

我觉得如果你的store定义了id属性的话(表明哪个字段是 唯一标识的那个)
可以这样 Ext.getCmp("grid_id").getSelectionModel().getSelected().id即可获得

之前说的小例子
[code="java"] <br> Ext.onReady(function(){<br> var sm =new Ext.grid.CheckboxSelectionModel();<br> var cm = new Ext.grid.ColumnModel([<br> sm,<br> {header:&#39;编号&#39;,dataIndex:&#39;id&#39;,sortable:true},<br> {header:&#39;名称&#39;,dataIndex:&#39;name&#39;,sortable:true},<br> {header:&#39;操作&#39;,dataIndex:&#39;descn&#39;,sortable:true}<br> ]);</p> <pre><code>var data = { count:5, &quot;rows&quot;:[ {id:&#39;1&#39;,name:&#39;name1d&#39;,descn:&#39;descn1&#39;}, {id:&#39;2&#39;,name:&#39;name1d&#39;,descn:&#39;descn1&#39;}, {id:&#39;4&#39;,name:&#39;name1d&#39;,descn:&#39;descn1&#39;}, {id:&#39;5&#39;,name:&#39;name1d&#39;,descn:&#39;descn1&#39;}, {id:&#39;3&#39;,name:&#39;name2&#39;,descn:&#39;descn2&#39;} ] }; var reader = new Ext.data.JsonReader({ totalProperty: &#39;count&#39;, root: &#39;rows&#39;, id:&quot;id&quot;, fields:[ {name: &#39;id&#39;,mapping:&quot;id&quot;}, {name: &#39;name&#39;,mapping:&quot;name&quot;}, {name: &#39;descn&#39;,mapping:&quot;descn&quot;} ] }) var store = new Ext.data.Store({ proxy: new Ext.data.MemoryProxy(data), reader: reader }); var grid = new Ext.grid.GridPanel({ height: 200, applyTo: &#39;grid&#39;, width :310, store: store, cm: cm, sm:sm, frame:&quot;true&quot; }); store.load(); </code></pre> <p>Ext.get(&quot;get&quot;).on(&quot;click&quot;,function(){<br> var s = grid.getSelectionModel().getSelected().id;<br> alert(s);</p> <p>})</p> <p>});<br>

    <div id="grid"></div>

     <input type="button" value="选择一行后 点我" id="get">
</body>

[/code]

跟Ext.getCmp()没关系,主要是看你Record的id配置

mark一下,楼上的回答的都不错。。我想知道的,多选情况下,我如何从record获取选择的记录总数,我通过

var record = this.grid.getSelectionModel().getSelected();
record.length()获取不到记录总数..