ExtJSのバージョンはext-4.0.7-gplです。ExtJSでストアの自動同期を無効にする方法
Storeを同期すると、サーバーは同じオブジェクトをJSON形式で返しますが、生成されたIDはストアデータに格納する必要があります。識別子は、次のように囲まれたエンティティにあります。
{
"id":46,
"name":"Excel",
"typeExt":[
{
"ext":"xls",
"id":"137",
"isMain":"false",
},
{
"ext":"xslx",
"id":"136",
"isMain":"false",
}
]
}
したがって、ids 137と136はサーバサイドで生成されます。
私は店のプロキシ(編集:Ajaxのタイプ)でそれを作るためにしようとしています(それ自体が間違っている可能性):
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に設定しないと、無限にループします。
「変更された」フィールドと「ダーティー」フィールドをクリアしないと、変更されたレコードが次の同期要求に含まれます。別のレコードを編集すると、のレコードサーバーサイドのサービスが壊れてしまいます。
コメント行に表示されているように「ダーティ」および「変更済み」をクリアした場合、更新操作は1回だけ実行されます。 RowEditingプラグインダイアログのUpdateボタンを押しますが、2回目に必要なリクエストをサーバーに送信しません。
後者の場合、私は手書きのフィールドを手で編集して何かを壊したと思いますが、何が見つかりませんか?
人々は通常どのように問題に対処していますか?
PS。 request.records [0] .commit(true); || request.records [0] .editing = false; || request.records [0] .beginEdit(); seccessも無かった。
ありがとうございます!コードはかなり面倒です。 'Picker'は、' typeExt'サブ配列を編集するためのグリッドを開きます。 'valueToRaw'と' rawToValue'の2つのメソッドがあります。これらのメソッドは、 'extEx'フィールドの連結によって作られた' typeExt'配列からStringを作ります。実際には 'Picker'では動作しますが、連結されたStringを手作業で編集して汎用的な' typeExt'配列を作ることができるようにしたいと考えています。私はそのコードをデバッグして、それに応じて 'pickerfield'が更新されるようにしました...もし私がautoSyncを一時的に無効にする方法を見つけたら、問題は残っています。 – fedd
あなたの答えは私の質問のためだけではありませんが、私の問題を解決する助けになりました。私はあなたの答えを受け入れたいと思いますが、それは私が推測するサイトのルールではありません。 「あなたは自動同期を無効にする良い方法はありません」という回答を修正することができます。それを受け入れるでしょうか? – fedd