我如何阻止extjs模型/代理在创建时保存空的主要ID

时间:2012-04-10 07:21:42

标签: extjs

我用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字段。

2 个答案:

答案 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,如果它是空的