我用REST代理定义了我的模型。它适用于读取(GET)和更新(PUT),因为这些操作需要主ID。当我执行创建操作(POST)时,代理会将所有字段(包括空的主ID)发送到服务器,这会导致服务器上的错误。服务器期望创建操作不包含主ID。我如何指示extjs不发送空的主id值?即。 " {' model_id':'',...}"?
Ext.define('model', {
extend : 'Ext.data.Model',
idProperty : 'model_id',
fields : ['model_id', 'first', 'last'],
proxy : {
type : 'rest'
}
});
var mymodel = Ext.create('model',{last:'digler'});
mymodel.save() //posts "{ 'model_id':'', 'last':'digler'}"?
我希望它不会在创建时包含主要的id字段。
答案 0 :(得分:1)
我认为这是改变请求结构的错误方法。在使用REST的情况下,操作create,update请求的责任完全在服务器端。
如果你仍想在启动创建请求时更改参数,可以通过“beforerequest”事件来完成:
Ext.Ajax.on("beforerequest", function( conn, options, eOpts){
if (options.action=='create')
{
var newData =
{'name': options.jsonData.name, 'email': options.jsonData.email };
options.jsonData = newData;
}
});
例如,我重新定义了硬编码的数据字段,但是,当然,可以在循环中遍历所有字段,而无需在代码中写入其名称。
答案 1 :(得分:1)
您可以将其设置为null,但使用
fields:[
{
name:'model_id',
type:'int'
useNull:true
}
]
虽然如果model_id是一个字符串,它仍然是''
您也可以在字段上设置persist = false
,但之后不会将其保存在更新
基本上,告诉你的服务器管理员忽略id,如果它是空的