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();也沒有嘗試過。
謝謝!代碼很雜亂。它是一個'Picker',它打開一個網格來編輯'typeExt'子陣列。有兩種方法,'valueToRaw'和'rawToValue',它們通過連接'ext'字段,從'typeExt'數組中創建String。實際上,使用'Picker'它可以工作,但他們希望我可以手動編輯串聯字符串,並從中創建一個通用的'typeExt'數組。我調試了該代碼以確保'pickerfield'相應地更新了...如果我發現如何暫時禁用autoSync,並且問題仍然存在,那麼在同步此係統失敗後,我會仔細查看該代碼。 – fedd 2012-02-02 14:53:22
再次感謝您,雖然您的回答並非完全針對我的問題,但您幫助我解決了我的問題。我想接受你的回答,但這不是我猜想的網站規則。你可以用'沒有好的方法來禁用自動同步'來修改你的答案,我會接受它,好嗎? – fedd 2012-02-06 09:13:40