我想问你一个问题,关于一个模型的使用,这个模型调用一个数据阅读服务,这个服务返回一个json。所有的字段都在模型中声明。当这个模型被用于创建一个商店时,它会调用一个数据读取服务,这个服务以json的格式返回。当删除服务被启动时,它只希望接收ID字段。它会出错,因为sync方法的存储传递了所有字段。我如何确保在调用sync模式时只传递了ID字段?我还通过创建一个只有一个字段的模型进行了测试:
字段:['名字',{类型:'int',名称:'ID' }],即使在模型中只指定了一个字段,存储也会使用来自json的所有字段进行初始化,然后它会正确执行remove方法,但在启动同步时,它会出错,因为所有字段都存在,而不仅仅是ID。
这是模型:
扩展定义('AmpelideWeb.模型. VignaToponimo',{扩展:'放大器Web模型库',
fields: [{
name: 'ID',
type: 'int'
},
{
name: 'CODICE',
type: 'string'
},{
name: 'DESCRIZIONE',
type: 'string'
},{
name: 'SIAN_CODICE',
type: 'string'
},{
name: 'SIAN_EXPFLG',
type: 'string'
},
{
name: 'ID_REGIONE',
type: 'int'
},{
name: 'ID_PROVINCIA',
type: 'int'
}],
statics: {
baseUrl: 'vigne/toponimi'
},
});
这是模型库:
扩展定义('AmpelideWeb.模型.基础',{
extend: 'Ext.data.Model',
identifier: 'negative',
idProperty: 'ID',
inheritableStatics: {
format: 'json',
idParam: 'ID',
readMethod: 'POST',
costantUrl:'http://192.168.24.8:8080/API/v1/'
},
schema: {
proxy: {
type: 'ajax',
idParam: '{idParam}',
paramsAsJson: false,
api: {
create : '{costantUrl}'+'{baseUrl}'+'/insert',
read : '{costantUrl}'+'{baseUrl}',
update : '{costantUrl}'+'{baseUrl}'+'/edit',
destroy : '{costantUrl}'+'{baseUrl}'+'/delete'
},
actionMethods: {
create: 'POST',
read: '{readMethod}',
update: 'POST',
destroy: 'POST'
},
reader: {
type: '{format}'
},
writer: {
//rootProperty:'',
type: '{format}',
writeAllFields: true,
allowSingle: false,
},
}
}
});
这是删除方法:
删除时单击:函数(){
var form = Ext.getCmp('DettaglioVignaToponimo');
let vignaToponimoIdDelete = this.vignaToponimoId;
let store = Ext.create('Ext.data.Store', {
model: 'AmpelideWeb.model.VignaToponimoDelete',
});
store.load();
store.proxy.paramsAsJson = true;
if (form.getValues().ID!==null){
Ext.Msg.confirm('Eliminazione Vigne Toponimi', 'Se sicuro di voler eliminare il dato selezionato ?', function (id, value) {
if (id === 'yes') {
store.proxy.headers = {'Content-Type': 'application/x-www-form-urlencoded'};
const record = new AmpelideWeb.model.VignaToponimoDelete({ID: vignaToponimoIdDelete});
store.remove(record);
store.sync({
success: function (batch) {
Ext.Msg.alert('Eliminazione dati Vigne Toponimi!', 'Eliminazione Vigne Toponimi avvenuta correttamente', function (btn) {
});
},
failure: function (batch, opt) {
responseObj = batch.exceptions[0].error.response.responseJson;
Ext.Msg.alert('Eliminazione Vigne Toponimi fallita', 'messaggio di errore: ' + responseObj.message);
}
});
}else{
return false;
}
})
}else{
Ext.Msg.alert('Eliminazione Vigne Toponimi fallito', 'messaggio di errore: ID Vigne Toponimi è null, nessun dato da eliminare.');
}
},
1条答案
按热度按时间rggaifut1#
即使在模型中只指定了一个字段,存储也会使用来自json的所有字段进行初始化,然后它会正确执行remove方法,但在启动sync时,它会出错,因为所有字段都存在,而不仅仅是ID。
两件事:Ext动态地将字段添加到基于数据的模型中。它鼓励不维护字段元数据,并使其更灵活。writeAllFields为true,这就是为什么代理发送所有参数。
writeAllFields只对UPDATE操作有意义,但无论如何,我们在这里没有对请求类型控制。
据我所知,你想在发送请求之前处理数据。我认为Ext.data.writer.Writer的转换将是一个很好的方法。
你可以在作家它像下面这样:
小提琴链接