2012-04-10 32 views
2

我已經使用REST代理定義了我的模型。它適用於讀(GET)和更新(PUT),因爲這些操作需要主ID。當我執行創建操作(POST)時,代理會將所有字段(包括空主ID)發送到服務器,這會導致服務器出現錯誤。服務器期望創建操作不包含主ID。我如何指示extjs不發送空的主ID值?即。 「{'model_id':'',...}」?我如何防止extjs模型/代理在創建時保存空的主要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字段上建立的。

回答

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; 
    } 
}); 

就比如我重新定義數據字段硬編碼的,但是,當然,可以遍歷循環中的所有字段,而不用在代碼中寫入其名稱。

+0

我正在用這個方法,只是刪除id屬性從jsonData:delete options.jsonData ['post_id']。使堅持虛假是不方便的,因爲我需要更新的id – Paul 2012-04-10 18:28:35

1

那麼,你有一個非常暴躁的服務器,那麼,不是嗎?

你可以將其設置爲空,但使用

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

但如果MODEL_ID是一個字符串,它仍然是''

您可以在現場設置persist = false過,但那麼就不會保存在更新

基本上,告訴您的服務器管理員忽略該ID如果它是空的

相關問題