2012-02-02 38 views
1

ExtJS版本是ext-4.0.7-gpl。如何禁用ExtJS中商店的自動同步

同步存儲時,服務器以JSON格式返回同一個對象,但使用生成的Ids填充,我需要將其存儲到我的存儲數據中。標識符是封閉的實體,如下所示:

{ 
    "id":46, 
    "name":"Excel", 
    "typeExt":[ 
     { 
      "ext":"xls", 
      "id":"137", 
      "isMain":"false", 
     }, 
     { 
      "ext":"xslx", 
      "id":"136", 
      "isMain":"false", 
     } 
    ] 
} 

因此,137和136在服務器端生成。

我試圖讓它在商店的代理(編輯:阿賈克斯型)(其本身可能是錯誤的):

proxy.afterRequest = function(request){ 
     if(request.action === 'create' && request.records.length==1){ 
       me.store.autoSync = false; 
       var created = Ext.JSON.decode(request.operation.response.responseText); 
       request.records[0].set('id', created.id); 
       request.records[0].set('typeExt', created.typeExt); 
       //request.records[0].modified = {}; 
       //request.records[0].dirty = false; 
       me.store.autoSync = true; 
     } 
     if(request.action === 'update' && request.records.length==1){ 
       var updated = Ext.JSON.decode(request.operation.response.responseText); 
       me.store.autoSync = false; 
       request.records[0].set('typeExt', updated.typeExt); 
       me.store.autoSync = true; 
     } 

    }; 

看到評論的變種。

如果我不將autoSync設置爲false,它將無限循環。

如果我不清除這些「只讀」字段「修改」和「髒」,修改記錄都包含在接下來的同步化的要求,如果我編輯的另一條記錄,它發送的記錄的陣列這打破了我的服務器端服務。

如果我清除了「髒」和「修改」,就像它在註釋行中顯示的那樣,那麼更新操作只能運行一次。我在RowEditing插件對話框中按Update按鈕,但它從不將所需的請求第二次發送到服務器。

在後一種情況下,我想通過手動編輯readonly字段來破壞某些東西,但是我找不到。

人們通常會如何處理這個問題?

PS。 request.records [0] .commit(真); || request.records [0] .editing = false; || request.records [0] .beginEdit();也沒有嘗試過。

回答

2

我有這個工作的網格商店與Ext 4.0.7,但有樹存儲類似的問題。所有這些與直接代理(和自動同步真)

如果你看看Ext.data.Store::onCreateRecords的代碼,你會看到,商店記錄被從服務器返回的那些代替,給定的訂單是一樣的。

所以,它非常直接:從服務器返回發送給create方法的同一個json/object,但設置了id,它應該在商店中自動更新它們。

我知道這沒什麼幫助,但也許會給你一些方向。

我認爲,如果你提到它會幫助:

  • 你使用
  • 確切的分機版本
  • 也許是代理類型的代碼開始記錄
的創建
+0

謝謝!代碼很雜亂。它是一個'Picker',它打開一個網格來編輯'typeExt'子陣列。有兩種方法,'valueToRaw'和'rawToValue',它們通過連接'ext'字段,從'typeExt'數組中創建String。實際上,使用'Picker'它可以工作,但他們希望我可以手動編輯串聯字符串,並從中創建一個通用的'typeExt'數組。我調試了該代碼以確保'p​​ickerfield'相應地更新了...如果我發現如何暫時禁用autoSync,並且問題仍然存在,那麼在同步此係統失敗後,我會仔細查看該代碼。 – fedd 2012-02-02 14:53:22

+0

再次感謝您,雖然您的回答並非完全針對我的問題,但您幫助我解決了我的問題。我想接受你的回答,但這不是我猜想的網站規則。你可以用'沒有好的方法來禁用自動同步'來修改你的答案,我會接受它,好嗎? – fedd 2012-02-06 09:13:40