我试图将我的前端(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请求。 (接收不是问题,发送是)。
我想我有点需要触发我的商店或商店的代理。但是怎么样? 我不能简单地告诉我的对象保存,因为我确实有更多的数据而不仅仅是更改的对象的属性。
有人可以帮我吗?
答案 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 参数。