ExtJs(6.0.0)休息服务PUT请求

时间:2018-05-09 16:11:42

标签: extjs extjs6-classic

我试图将我的前端(ExtJs)中的一些数据放入我的后端(Java,Spring)。它不起作用或我没有得到正确的线索......

我在 Ext.grid.Panel ,我使用以下商店(很好地)填充并显示 this.store.setData(myObject.data.items) 方法:

Ext.define( 'NameOfThisClass', {
  extend: 'Ext.grid.Panel',
  ...

  store: Ext.create( 'Ext.data.Store', {
    data: [],
    autoLoad: false,

    proxy: {
        type: 'rest',
        url: '/somepath/theclass',
        reader: {
            type: 'json',
            rootProperty: 'data',
            totalProperty: 'totalCount'
        },
        writer: {
            type: 'json'
        },
    }
  } ),

  ...
  // setting the data to be visualized
  setValue: function(myObject) {
    this.store.setData( myObject.data.items );
  }
  ...

  updateRecord: function(objectId, objectWithUpdateProperties) {
    // do what with the store and/or proxy?
  }
  ...
});

我显示表格中的所有条目。商店不会自动加载条目,而是从外部设置: setValue(myObject)
还有另一个用于初始加载数据的商店。然后,收到的数据将被拆分并转发,以便不会有多个请求。

我有一个很好的可视化表格,其条目可由划船插件编辑。

好的,到目前为止的背景。

当编辑表的数据时,我运行一些验证并通过模态对话框收集更多数据,然后我有数据,以便通过调用 updateRecord(objectId,objectWithUpdateProperties)发送到服务器

这次发送是我的问题。我不知道如何调用/发送将由服务器读取的rest / put请求。 (接收不是问题,发送是)。

我想我有点需要触发我的商店或商店的代理。但是怎么样? 我不能简单地告诉我的对象保存,因为我确实有更多的数据而不仅仅是更改的对象的属性。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

我通常使用Ext.Ajax实现这一点,如下所示:

updateRecord: function(objectId, objectWithUpdateProperties) {

    Ext.Ajax.request({
       url: 'YourUrl',
        params: {       
            some_param: 'some_value',
            object_id: objectId,
            object_with_properties_param1: objectWithUpdateProperties.param1
        },
        success: function(response, opts) {     
            //Horay, Do something with the response
        },
        failure: function(response, opts) {
            //Oh nooooo            
        }
    });
}

答案 1 :(得分:0)

不需要使用Ajax。 您需要在RestProxy上配置 proxy.api CRUD( C:创建,R:读取,U:更新.D:删除),客户端。 此外,商店必须包含 autoSync:true

在服务器端,需要为每个CRUD配置一个@RestController( JSON-Java编码器用于 Jackson 或等效的参数),这将接受JSON数据。请注意,您只能发送修改后的字段( store.proxy.writer.writeAllFields:false - &gt;&gt;&gt; 默认< / em> )或者只是服务器的完整记录( .writeAllFields:true )。 这里有一个例子(内部商店的构造函数):

constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
me.callParent([Ext.apply({
                autoLoad: true,
                autoSync: true,
                model: 'Test.model.Country',
                proxy: {
                    type: 'rest',
                    api: {
                        create: 'country/create',
                        read: 'counrtry/list'
                        update: 'counrtry/update',
                        destroy: 'counrtry/destroy'
                    },
                    writer:{
                        writeAllFields : true
                    },
                    reader:{
                        root:'items',
                        totalProperty: 'rowCount'
                    }
                }
            }, cfg)]);
}

额外注意:要自动从服务器和加载存储中读取,只需从服务器端设置store.autoLoad:true和相应的 @RestController方法。考虑 store.reader 参数。