0

我是 extjs 的新手,我面临一个问题,我真的不明白为什么它不起作用。我试图从我的网格和填充网格的数据库中删除一行,但我的客户说我的服务器上没有删除(抱歉英语不好)

这是我的代码:

店铺:

Ext.define('LU.store.Audios', {
    extend: 'Ext.data.Store',       
        autoLoad: true,
        autoSync: true,
        model: 'LU.model.Audio',

        proxy: {
            type: 'rest',

            api: {
                create: 'http://localhost:3000/upload',
                read: 'http://localhost:3000/list',
                update: 'http://localhost:3000/update',
                destroy: 'http://localhost:3000/delete'
            },

            reader: {
                type: 'json',
                root: 'audios',
                totalProperty  : 'total',
                successProperty: 'success'
            },
            writer: {
                type: 'json'
            }       

        }


    });

模型 :

Ext.define('LU.model.Audio', {
    extend: 'Ext.data.Model',
    fields: [ 
        { name: 'id', type: 'int'},
        { name: 'name', type: 'string'},
        { name: 'path', type: 'string'}
    ],

});

看法 :

Ext.define('LU.view.Main', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.mainview',
    id: 'main',





    initComponent: function() {

        this.items = [{

        }, {
            xtype: 'grid',
            title: 'Audio liste',
            store: 'Audios',
            id: 'mygrid',

            columns: [
                {text: 'Dateiname', dataIndex: 'name'},
                {text: 'Dateipfad', dataIndex: 'path'}
            ],
            listeners : {
                afterrender : function (grid) {
                        grid.addDocked({
                            xtype: 'toolbar',
                            dock: 'top',
                            items: [{
                                text: 'Delete',
                                action: 'delete'
                            }, {
                                text: 'Download'
                            }]
                        });
                    }

            },

        }
        ];
        this.callParent(arguments);
    }
});

和控制器:

Ext.define('LU.controller.MainController', {
    extend: 'Ext.app.Controller',

    views:  ['Main'],
    stores: ['Audios'],
    models: ['Audio'],

    init: function() {
        this.control({

        'mainview button[action=delete]': {
                click: this.delete
        }


        });

    },

    delete: function () {
        var grid = Ext.getCmp('mygrid');
        var row = grid.getSelectionModel().getSelection();

        Ext.getStore("Audios").remove(row);


    },



});

和服务器:

var express = require ('express');
var app = express();
var fs = require('fs');
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'root',
});



connection.connect();
connection.query('USE diktierserver');

app.use(express.bodyParser()); 


app.all('*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Origin, Accept');
    res.header('Access-Control-Allow-Credentials', 'true');
    if(req.method.toLowerCase()==='options'){
        res.send(200);
    }else{
        next();
    }
});
app.delete('/delete', function (req,res) {

    res.header('Access-Control-Allow-Origin', '*');
    res.header('Content-Type','text/plain; charset=UTF8');

        console.log(req);
        var id = req.params.id;

        connection.query('DELETE FROM audio WHERE id = ' + id +'', function (err,result) {
        if (err) throw err;
        console.log(name + 'deleted');
        res.status(200).send(JSON.stringify());
    });

});
app.listen(3000);

4

1 回答 1

0

使用 时Ext.data.proxy.Rest,删除/删除操作的默认值actionMethod是 HTTP DELETE 动词。因此,您应该确保您的 Web 服务器设置允许此 HTTP 动词。我遇到了一些负载均衡器甚至没有实现 DELETE 动词的问题,这使得在 Rest 代理中无法使用默认操作。

当然,您可以更改通过 DELETE 操作发送的 VERB。例如,您可以将其更改为 PUT,并且仍然获得与 DELETE 相同的幂等行为。

于 2013-06-04T12:43:42.460 回答