Ext.grid.面板编辑被忽略

Ext.grid.Panel edits are ignored

本文关键字:编辑 grid Ext      更新时间:2023-09-26

我有一个简单的网格面板,需要支持编辑。从视觉上看,它似乎还可以工作,但一旦我尝试获取数据存储中的所有用户,就好像所有编辑都被忽略了。

这是代码:

var myData = 
[        
];
var store = Ext.create('Ext.data.ArrayStore', 
                        {
                            model: 'User',
                            data: myData
                        });
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit: 1
});
// create the grid and specify what field you want
// to use for the editor at each header.
var grid = Ext.create('Ext.grid.Panel', {
    store: store,
    columns: 
    [
        {
            id: 'email',
            header: 'User email',
            dataIndex: 'email',
            flex: 1,
            field: 
            {
                allowBlank: false
            }
        },           
        {
            xtype: 'checkcolumn',
            header: 'IsManager',
            dataIndex: 'isManager',
            width: 55
        },
        {
            xtype: 'checkcolumn',
            header: 'IsContractor',
            dataIndex: 'isContractor',
            width: 55
        }
    ],
    selModel: {
        selType: 'cellmodel'
    },        
    frame: false,
     listeners : 
     {
        delay: 1, // time for render
        validateedit: function(editor, e)
        {
            //console.log(e.value);
            //console.log(e.originalValue);
            e.cancel = true;
            e.record.data[e.field] = e.value;
        }
     },
    tbar: 
    [
        {
            text: 'Add User',
            handler : function()
            {
                // Create a record instance through the ModelManager
                var r = Ext.ModelManager.create(
                {
                    email: '',
                    isManager: true,
                    isContractor: false
                }, 
                'User');
                store.insert(store.data.length, r);
                cellEditing.startEditByPosition({row: store.data.length, column: 0});
            }
        },
        {
            text: 'Remove selected user',
            handler : function()
            {
                var selection = grid.getView().getSelectionModel().getSelection();
                if(selection)
                    store.remove(selection); // all selections
            }
        }
    ],
    plugins: [cellEditing]
});

我正在使用Extjs 4.2

即使调用store.commitChanges()也没有什么区别。如果我不调用它并浏览存储,我可以看到记录上有脏标志,但修改后的值与初始值相同!奇怪的是,如果我在validatedit函数中放置断点,我可以看到那里的值。然而,一旦完成了所有编辑和添加,当我浏览store.data.items时,所有行看起来都是一样的(=在Add user中创建Ext.ModelManager.create输出的内容)。我试过在商店中将autoSave、autoSync和autoLoad设置为true,但没有任何区别。

编辑:

这是用户模型:

Ext.define('User', 
    {
        extend: 'Ext.data.Model',
        fields: [            
            {name: 'email', type: 'string'},            
            {name: 'isManager', type: 'bool'},
            {name: 'isContractor', type: 'bool'},            
        ]
    });

我不认为e.record.data[e.field] = e.value;正在更改存储中的值,根据文档,它只是一个util对象。如果你真的想修改你的商店,你应该使用这样的东西:

 validateedit: function(editor, e)
 {
        store.getbyId("Your object Id property").set(e.field, e.value);
 }

但是您的模型需要一个"Id"或"IdProperty"