Proxy从ExtJs存储发送多个请求

时间:2016-04-27 22:54:22

标签: java extjs

每次插入新商品时,我的应用都会向服务器发送乘法请求。当插入第一个项目时,它会调用一次POST,另外一个项目......两次,依此类推。

我是ExtJs的新人,所以你能帮我解决一些问题:

  1. 首先, sync 方法的作用是什么,没有store.sync()方法调用,为什么(GET,POST,PUT,DELETE)方法不被调用?
  2. 为什么我的帖子方法乘以请求?
  3. 为什么store.remove()(DELETE)方法在PUT方法正常工作时抛出400错误(错误请求)?
  4. 提前谢谢

    我的编辑控制器:

    Ext.define('MVC.controller.Edit', {
    extend: 'Ext.app.Controller',
    
    
    init: function () {
        this.control({
            'editForm > button#SaveRecord': {
                click: this.onSaveButtonClick
            },
            'editForm > button#DeleteButton': {
                click: this.onDeleteButtonClick
            }
        });
    },
    
    onSaveButtonClick: function (btn) {
        //get reference to the form
        var detailView = btn.up('editForm');
    
        //get the form inputs
        var data = detailView.getValues();
    
        //see if the record exists
        var store = Ext.getStore('TestStore');
        console.log(data.id);
        var record = store.getById(data.id);
    
        if (!record) {
            record = Ext.create('MVC.model.Note', {
                title: data.title,
                created: new Date(),
                updated: new Date(),
                text: data.text
            });
    
            store.insert(0, record);
            store.sync();
            Ext.MessageBox.alert('Created', record.id);
            return;
        }
    
        record.set(data);
    
        store.sync();
        //manually update the record
        detailView.updateRecord();
    },
    
    onDeleteButtonClick: function (btn) {
    
        //get reference to the form
        var detailView = btn.up('editForm');
    
        //get the form inputs
        var data = detailView.getValues();
    
        var store = Ext.getStore('TestStore');
        var record = store.getById(data.id);
        store.remove(record);
        store.sync();
    }
    });
    

    商店:

    Ext.define('MVC.store.TestStore', {
    extend  : 'Ext.data.Store',
    
    requires : [
        'MVC.model.Note'
    ],
    
    storeId : 'TestStore',
    model   : 'MVC.model.Note',
    autoLoad: false,
    proxy: {
        type : 'rest',
        url: 'rest/notes',
        actionMethods : {
            create  : 'POST',
            read    : 'GET',
            update  : 'PUT',
            destroy : 'DELETE'
        },
        reader: {
            type: 'json',
            rootProperty: 'data'
        },
        writer: {
            type: 'json'
        }
    }
    });
    

    模特:

    Ext.define('MVC.model.Note', {
    extend: 'Ext.data.Model',
    
    fields: [
        {
            name: 'id',
            type: 'string'
        },
        {
            name: 'title',
            type: 'string'
        },
        {
            name: 'created',
            type: 'date'
        },
        {
            name: 'updated',
            type: 'date'
        },
        {
            name: 'text',
            type: 'string'
        }
    ]
    });
    

1 个答案:

答案 0 :(得分:0)

尝试使用记录的方法:

1)将代理添加到您的模型中,如下所示:

Ext.define('MVC.model.Note',{
extend: 'Ext.data.Model',

fields: [
{
    name: 'id',
    type: 'string'
},
{
    name: 'title',
    type: 'string'
},
{
    name: 'created',
    type: 'date'
},
{
    name: 'updated',
    type: 'date'
},
{
    name: 'text',
    type: 'string'
}],

proxy:
{
    type: 'rest',
    url: 'rest/notes',
    reader:
    {
        type: 'json'
    }
}
});

2)现在您可以使用以下方法:record.save() - 如果从服务器加载存储 PUT 并且记录有ID,则发送 POT 此记录是使用record.create()创建的; record.destroy() - 将 DELETE 发送到ID为record的服务器; 您可以使用Ext.ModelManager.getModel('Model_name').load(id)向服务器发送 GET 请求以获取单个记录。 3)使用store.load() GET 来自服务器的记录数组