2

我已经用 REST 代理定义了我的模型。它适用于读取 (GET) 和更新 (PUT),因为这些操作需要主 ID。当我执行创建操作(POST)时,代理会将所有字段(包括空的主 ID)发送到服务器,这会导致服务器上出现错误。服务器期望创建操作不包含主 ID。我如何指示 extjs 不发送空的主 id 值?IE。“{'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 字段。

4

2 回答 2

1

我认为这是改变请求结构的错误方法。在使用 REST 的情况下,操作创建、更新请求的责任完全在服务器端。

如果您在创建请求开始时仍想更改参数,您可以通过“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;
  }
});

例如,我重新定义了硬编码的数据字段,但是,当然,可以在循环中遍历所有字段,而无需在代码中写入其名称。

于 2012-04-10T11:03:06.830 回答
1

那么,你有一个非常脾气暴躁的服务器,不是吗?

您可以将其设置为空,但使用

fields:[
{
name:'model_id',
type:'int'
useNull:true
}
]

虽然如果 model_id 是一个字符串,它仍然是''

你也可以persist = false在现场设置,但它不会在更新时保存它

基本上,告诉您的服务器管理员忽略 id 如果它是空的

于 2012-04-10T16:43:16.437 回答