如何在网格编辑extjs 6.2.0后只向DB发送一行

时间:2017-06-21 03:58:17

标签: extjs extjs6-classic extjs6.2

如何在网格编辑extjs 6.2.0之后只向DB发送一行?

在我连续编辑了一个单元格后,scipt会向服务器发送除之前编辑的所有行。 但是我喜欢只向服务器发送一行,我编辑了一个单元格。 怎么做? He is a json to server

Ext.require(['Ext.data.*', 'Ext.grid.*']);

Ext.util.Format.timefieldRenderer = function(format) {
    return function(v) {
        if (v instanceof Date) {
            return v.format(format);
        } else {
            return v;
        }
    };
};


// Создаем model
Ext.define('Users', {
    extend: 'Ext.data.Model',
    fields: [{
            name: 'id',
            type: 'int'
        },
        {
            name: 'time',
            type: 'date',
            //dateFormat: 'H:i'
        },

    ]
});

var occupationStore = Ext.create('Ext.data.Store', {
    fields: ['time'],
    data: [{
            time: 'CEO'
        },
        {
            time: 'Vicepresident'
        },
        {
            time: 'Marketing manager'
        },
    ]
});


Ext.onReady(function() {
    // Создаем store
    var store = Ext.create('Ext.data.Store', {
            autoLoad: true,
            autoSync: true,
            model: 'Users',
            proxy: {
                type: 'ajax',
                url: 'server.php',
                api: {
                    read: 'server.php?action=read',
                    update: 'server.php?action=update'
                },
                reader: {
                    type: 'json',
                    rootProperty: 'data'
                },
                writer: {
                    type: 'json',
                    encode: true,
                    rootProperty: 'dataUpdate',
                    allowSingle: false,
                    writeAllFields: true,
                    //root:'records'
                },
                actionMethods: {
                    read: 'GET',
                    update: 'GET'

                }
            },
        }


    );

    var grid = Ext.create('Ext.grid.Panel', {
        renderTo: document.body,
        //plugins: [rowEditing],
        // Редактирование
        plugins: {
            ptype: 'cellediting',
            clicksToEdit: 1
        },
        width: 1000,
        height: 330,
        frame: true,
        title: 'Users',
        store: store,
        iconCls: 'icon-user',
        columns: [{
                text: 'id',
                width: 50,
                sortable: true,
                dataIndex: 'id',
                renderer: function(v, meta, rec) {
                    return rec.phantom ? '' : v;
                }
            },
            {
                header: 'time',
                width: 120,
                // sortable: true,
                dataIndex: 'time_start',
                //format: 'H:i',
                // Нужно для верного отображеия времени после редактирования в таблице
                renderer: Ext.util.Format.dateRenderer('H:i'),
                editor: {
                    completeOnEnter: false,

                    field: {
                        xtype: 'timefield',
                        format: 'H:i',
                        //name: 'timeStart1',
                        //fieldLabel: 'Time In',
                        minValue: '8:00',
                        maxValue: '20:00',
                        increment: 30,
                        anchor: '100%',
                        allowBlank: false
                    }
                }
            },

        ],
    });
});

1 个答案:

答案 0 :(得分:0)

您可能只需要来自服务器的正确回复。如果服务器(PHP)返回

{"success":true}

每次成功调用update时,提交的记录都会标记为已成功同步("not dirty"),除非再次更改,否则将不再提交给服务器。

请注意,如果多个记录在前端一次更改,这不会阻止商店发送多条记录,但这会阻止一遍又一遍地向服务器发送冗余信息(已保存的记录)。

你可以在小提琴中看到这个:

https://fiddle.sencha.com/#view/editor&fiddle/21t6

请注意"服务器"在我的小提琴中需要几百毫秒才能回答,一旦记录不再变脏,更改的网格列上的红色耳朵就会消失。