无法使用Cell Editing Plugin删除Ext.data.Store记录

时间:2011-11-08 19:10:10

标签: extjs extjs4 store

您好我已经收到此错误消息一段时间了,我想知道我错过了什么。提前谢谢。

这是模型:

 Ext.define('Recepcion',{
            extend: 'Ext.data.Model',
            fields: [
                {name: 'obra_social_id', type: 'string'},
                (... etc)
            ]
        });

这是商店:

//the first line is the array supposed to contain the data?

var datosPlanillaRecepcion = [];

var storePlanillaRecepcion = Ext.create('Ext.data.Store', {
    model: 'Recepcion',
    data: datosPlanillaRecepcion,
    proxy: { type: 'memory'},
    autoSync:true
});

最后网格绑定到商店

planillaRecepcionGrid = Ext.create('Ext.grid.Panel', {

        id:'gridRecepcion',
        store: storePlanillaRecepcion,
        flex:0.7,
        height:600,
        autoScroll:true,
        selType: 'cellmodel',
        plugins: [cellEditing],
        columns: [
            columnaOS = Ext.create('Ext.grid.column.Column', {
                text     : 'Obra Social',
                flex     : 0.5,
                sortable : false,
                dataIndex: 'obra_social',
                renderer: function(value){
                    //return pasarMayusculas(value);
                    return value;
                },
                editor: {
                    allowblank: false
                    //clicksToEdit : 1
                }
            }),
            columnaTotal = Ext.create('Ext.grid.column.Column',{
                text     : 'Total',
                flex     : 0.2,
                sortable : false,
                dataIndex: 'obra_social_recepcion_cantidad_total',
                value    : ' ',
                editor: {
                    type:'numberfield',
                    allowblank: false,
                    minValue: 0,
                    maxValue: 1000000
                },
                renderer: function(value){
                    if (value==0)
                        return '';
                    else
                        return value;
                },
                listeners:{
                    validateedit: function(){

                        return true;
                    }
                }
            }),

            (...)

            {
                xtype: 'actioncolumn',
                width: 50,
                items: [{
                    tooltip: 'remove',
                    handler: function(grid, rowIndex, colIndex) {
                        var rec = grid.getStore().getAt(rowIndex);
                        grid.getStore().remove(rec);

                    }
                }]
            }],

        viewConfig: {
            stripeRows: false,
            border: 25,
            markDirty:false,
            listeners: listenersGridRecepciones
        }


    });

如您所见,我使用Cell Editing Plug-in用数据填充网格。 我通过以编程方式将行添加到网格中来实现此目的

grid.getStore()添加({});

添加emtpy对象并使用上面提到的插件编辑它们

事情就是当我点击动作栏时它会抛出

'o is undefined'错误,并且行号指向以下函数

getKey : function(o){
   return o.id;
}, 
顺便说一句,它属于Ext.util.AbstractMixedCollection

它能成为什么?,我知道! “这是一个痛苦的屁股”问题,但也许我错过了一些非常简单的事情

谢谢!

2 个答案:

答案 0 :(得分:1)

要使add方法适用于您的商店,您必须为Model中定义的每个字段指定默认值。

例如......

grid.getStore().add(
 { obra_social_id: 'id', anotherField: 'fieldVal' ... }
);

答案 1 :(得分:1)

如何修复

This is a bug, just place the null check by replace code in MixedCollection

getKey : function(o){
if(o)
return o.id;
else
return null;
}

thanks,
Kamal A. Siddiqui
Sr. Software Engineer (ACIT)