我有问题。我创建了一个简单的模型,并尝试通过ajax请求使用它来保存新值。但是必须为空的参数会发送默认值。你可以通过下面的链接看到它。代码没有专门设置正确的方式因为控制台(f12)可以看到堕落的挑战。在其中我通过查询字符串传递值,以及通过有效负载请求(尚未发明如何摆脱它,因为我理解它 - 默认使用有效负载)。通常,而不是空的carId调用转移Car-1。
https://fiddle.sencha.com/#fiddle/dsj
如何修复此行为并执行此操作,如果我们没有任何意义,它会传递为空?
答案 0 :(得分:1)
您可以创建扩展Ext.data.proxy.Ajax的自定义代理类,然后覆盖buildRequest方法以检查所有create
操作并将所需值分配给idProperty
Ext.define('CarProxy', {
extend: 'Ext.data.proxy.Ajax',
alias: 'proxy.carproxy',
type: 'ajax',
idParam: 'carId',
reader: {
type: 'json',
rootProperty: 'data'
},
api: {
create: './createcar.json'
},
writer: {
type: 'form'
},
buildRequest: function(operation) {
var request = this.callParent(arguments);
if (request.getAction() === 'create') {
request.getRecords().forEach(function(record) {
record.set('carId', ''); //assing desired value to id
});
}
return request;
}
});
答案 1 :(得分:0)
这是默认的ExtJS行为。如果未指定id,则会生成该ID。为了避免这种情况,你可以为你的模型添加构造函数:
Ext.define("Car", {
[...],
constructor: function() {
this.callParent(arguments);
// check if it is new record
if (this.phantom) {
// delete generated id
delete this.data[this.idProperty];
}
}
});
答案 2 :(得分:0)
谢谢所有回答的人。我想展示我的解决方案:
添加到模型定义参数 标识符:'自定义' 。 然后创建适当的标识符,它将在generate方法上返回undefined:
Ext.define('Custom', {
extend: 'Ext.data.identifier.Generator',
alias: 'data.identifier.custom',
generate: function() {
return;
}
});