从DB extjs6动态设置网格id

从DB extjs6动态设置网格id,extjs,extjs6,extjs6-classic,Extjs,Extjs6,Extjs6 Classic,我有一个网格。 此网格从postgres表中获取数据。 此表使用4个用户。 问题是,如果用户B在id为5的表中创建一行,用户a将不知道它。因此,当用户A创建一行时,他应该知道最后一个id是什么,或者创建一行并返回行id 当我在网格中按“添加”按钮时,extjs向服务器发送“创建”命令,服务器重新运行“success:true”和postgres表中新创建的“id”行数。 我想在我的表格中显示并使用这个“Id”。 例如,如果我添加一行,并从服务器获取“id:19”,我必须在和网格中创建19行。当我

我有一个网格。 此网格从postgres表中获取数据。 此表使用4个用户。 问题是,如果用户B在id为5的表中创建一行,用户a将不知道它。因此,当用户A创建一行时,他应该知道最后一个id是什么,或者创建一行并返回行id

当我在网格中按“添加”按钮时,extjs向服务器发送“创建”命令,服务器重新运行“success:true”和postgres表中新创建的“id”行数。 我想在我的表格中显示并使用这个“Id”。 例如,如果我添加一行,并从服务器获取“id:19”,我必须在和网格中创建19行。当我想要编辑这一行时,etxjs必须向服务器发送带有“id:19”的更新。 怎么做

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="/extjs/ext-6.2.0/build/classic/theme-classic/resources/theme-classic-all.css" />
    <script type="text/javascript" src="/extjs/ext-6.2.0/build/ext.js"></script>
    <script type="text/javascript" src="/extjs/ext-6.2.0/build/ext-all.js"></script>
    <script type="text/javascript">
        Ext.require(['Ext.data.*', 'Ext.grid.*']);


        // Создаем model
        Ext.define('Users', {
            extend: 'Ext.data.Model',
            idProperty: 'id',
            //idProperty: 'id',
            fields: [{
                    name: 'id',
                    type: 'int',
                    mapping: 'id'
                },
                //{name: 'date', type: 'date', dateFormat: 'Y-m-d'}
                // {
                //     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: 's.rakov.php',
                        api: {
                            create: 's.rakov.php?action=create',
                            read: 's.rakov.php?action=read',
                            update: 's.rakov.php?action=update',
                            destroy: 's.rakov.php?action=delete'
                        },
                        reader: {
                            type: 'json',
                            rootProperty: 'data'
                        },
                        writer: {
                            type: 'json',
                            encode: true,
                            rootProperty: 'dataUpdate',
                            allowSingle: false,
                            writeAllFields: true,
                            //root:'records'
                        },
                        actionMethods: {
                            create: 'GET',
                            read: 'GET',
                            update: 'GET',
                            destroy: 'GET'

                        }
                    },
                    listeners: {
                        write: function(store, operation) {
                            var record = operation.getRecords()[0],
                                name = Ext.String.capitalize(operation.action),
                                verb;


                            if (name == 'Destroy') {
                                verb = 'Destroyed';
                            } else {
                                verb = name + 'd';
                            }
                            //Ext.example.msg(name, Ext.String.format("{0} user: {1}", verb, record.getId()));

                        }
                    }
                }


            );

            var grid = Ext.create('Ext.grid.Panel', {
                renderTo: document.body,
                //plugins: [rowEditing],
                // Редактирование
                plugins: {
                    ptype: 'cellediting',
                    clicksToEdit: 1
                },
                listeners: {
                    edit: function() {

                    }
                },
                width: '99,3%',
                height: 330,
                frame: true,
                title: 'Users',
                store: store,
                iconCls: 'icon-user',
                columns: [{
                        text: 'id',
                        width: '2%',
                        sortable: true,
                        dataIndex: 'id',
                        renderer: function(v, meta, rec) {
                            return rec.phantom ? '' : v;
                        }
                    },
                     {
                        header: 'Задача',
                        width: '30%',
                        // sortable: true,
                        dataIndex: 'task',
                        editor: {
                            completeOnEnter: false,
                            field: {
                                xtype: 'textfield',
                                //name: 'timeStart1',
                                //fieldLabel: 'Time In',
                                anchor: '100%',
                                allowBlank: false
                            }
                        }
                    },
                    {
                        header: 'Время начала',
                        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
                            }
                        }
                    },
                    {
                        header: 'Результат',
                        width: '30%',
                        // sortable: true,
                        dataIndex: 'task_result',
                        editor: {
                            completeOnEnter: false,
                            field: {
                                xtype: 'textfield',
                                //name: 'timeStart1',
                                //fieldLabel: 'Time In',
                                //anchor: '100%',
                                allowBlank: false
                            }
                        }
                    },

                    {
                        header: 'Время конца',
                        width: 120,
                        // sortable: true,
                        dataIndex: 'time_end',
                        //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
                            }
                        }
                    },
                    {
                        header: 'Дата',
                        width: 70,
                        // sortable: true,
                        dataIndex: 'date',
                        renderer: Ext.util.Format.dateRenderer('d/m/Y'),
                        editor: {
                            completeOnEnter: false,
                            field: {
                                xtype: 'datefield',
                                dateFormat: 'd/m/Y',
                                allowBlank: false
                            }
                        }
                    },
                    {
                        header: 'Длительность',
                        width: 60,
                        // sortable: true,
                        dataIndex: 'time_duration'
                    },

                    // {
     //                    header: 'Тип задачи',
     //                    width: 120,
     //                    // sortable: true,
     //                    dataIndex: 'task_type',
     //                    editor: {
     //                        completeOnEnter: false,
     //                        field: {
     //                            xtype: 'combobox',
     //                            //name: 'timeStart1',
     //                            //fieldLabel: 'Time In',
     //                            anchor: '100%',
     //                            allowBlank: false
     //                        }
     //                    }
     //                }

                ],
                dockedItems: [{
                    xtype: 'toolbar',
                    items: [{
                        text: 'Add',
                        iconCls: 'icon-add',
                        handler: function() {
                            // Создаем новую задачу
                            // Для корректной работы с БД нужно задать ID новой строки, равной +1 от последней ID из таблицы.
                            var rec = new Users();
                            //console.log (x);("rec data= " + rec.id + " -- " + rec.data.id);
                            var idArr = grid.store.data.items;
                            var idValue = [];
                            for (var i = 0; i < idArr.length; i++) {
                                idValue.push(idArr[i].id);
                            }
                            idValue.sort(function(a, b) {
                                return a - b;
                            });
                            var maxId = idValue[idValue.length - 1];
                            console.log(maxId);
                            //rec.id = maxId + 1;
                            //rec.data.id = maxId + 1;

                            rec.date = Ext.Date.format(new Date(), 'Y-m-d\\T00:00:00');
                            rec.data.date = Ext.Date.format(new Date(), 'Y-m-d\\T00:00:00');

                            rec.time_start = Ext.Date.format(new Date(), '2008-01-01\\TH:i:s');
                            rec.data.time_start = Ext.Date.format(new Date(), '2008-01-01\\TH:i:s');
                            store.insert(0, rec);
                            //store.add(rac);
                            //grid.getView().refresh();
                            // rowEditing.startEdit(rec, 0);
                        }
                    }, '-', {
                        itemId: 'delete',
                        text: 'Delete',
                        iconCls: 'icon-delete',
                        disabled: false,
                        handler: function() {
                            var selection = grid.getView().getSelectionModel().getSelection()[0];
                            if (confirm('Вы действительно хотите удалить задачу №' + selection.id + " ?")) {
                                // Удлаяем      
                                if (selection) {
                                    store.remove(selection);
                                }
                            }
                        }
                    }]
                }]
            });
        });
    </script>
</head>

<body>
    <div id="gridDiv"></div>
</body>

</html>

Ext.require(['Ext.data.*','Ext.grid.*']);
//СззаМ模型
Ext.define('用户'{
扩展:“Ext.data.Model”,
idProperty:“id”,
//idProperty:“id”,
字段:[{
名称:“id”,
键入:“int”,
映射:“id”
},
//{name:'date',type:'date',dateFormat:'Y-m-d'}
// {
//名称:'时间',
//键入:“日期”,
//dateFormat:'H:我
// },
]
});
//var occuptionstore=Ext.create('Ext.data.Store'{
//字段:[“时间”],
//数据:[{
//《时代》:首席执行官
//         },
//         {
//时代周刊:“副总统”
//         },
//         {
//《时代》:营销经理
//         },
//     ]
// });
Ext.onReady(函数(){
//СззаМ商店
var store=Ext.create('Ext.data.store'{
自动加载:对,
自动同步:对,
模型:“用户”,
代理:{
键入:“ajax”,
url:'s.rakov.php',
api:{
create:'s.rakov.php?action=create',
读:“s.rakov.php?action=read”,
update:'s.rakov.php?action=update',
销毁:“s.rakov.php?action=delete”
},
读者:{
键入:“json”,
rootProperty:“数据”
},
作者:{
键入:“json”,
编码:对,
rootProperty:“数据更新”,
allowSingle:false,
writeAllFields:对,
//根:'记录'
},
行动方法:{
创建:“获取”,
读:“得到”,
更新:“获取”,
摧毁:“得到”
}
},
听众:{
写入:函数(存储、操作){
var record=operation.getRecords()[0],
name=Ext.String.capitalize(operation.action),
动词;
如果(名称=‘销毁’){
动词=‘销毁’;
}否则{
动词=名称+d';
}
//msg(名称,Ext.String.format(“{0}用户:{1}”,动词,record.getId());
}
}
}
);
var grid=Ext.create('Ext.grid.Panel'{
renderTo:document.body,
//插件:[行编辑],
// Редактирование
插件:{
p类型:'cellediting',
单击编辑:1
},
听众:{
编辑:函数(){
}
},
宽度:“99,3%”,
身高:330,
框架:对,
标题:“用户”,
店:店,,
iconCls:“图标用户”,
栏目:[{
文本:“id”,
宽度:“2%”,
可排序:是的,
数据索引:“id”,
渲染器:函数(v、meta、rec){
返回记录幻影?'':v;
}
},
{
标题:“ааачаa”,
宽度:“30%”,
//可排序:是的,
dataIndex:'任务',
编辑:{
CompleteOneNoter:错误,
字段:{
xtype:'textfield',
//名称:“timeStart1”,
//fieldLabel:'时间在',
主播:100%,
allowBlank:false
}
}
},
{
标题:“аааааа”,
宽度:120,
//可排序:是的,
数据索引:“开始时间”,
//格式:“H:i”,
// Нужно для верного отображеия времени после редактирования в таблице
渲染器:Ext.util.Format.dateRenderer('H:i'),
编辑:{
{"updateData":[{"task":"Test", "id":"ext-task-46"},{"task":"Test 2", id: "ext-task-47"}]}
{"success":true,"data":[{"task:"Test","id":5},{"task:"Test 2","id":6}]
{"success":true,"data":[{"id":5},{"id":6}]