私は 4.1.1 から 4.2.1 へのアップグレード後のバグ修正に取り組んでおり、しばらくの間ツリービューで立ち往生しています。
アプリケーションを初めて起動した後 (またはページを更新した後) にコンポーネントがどのように見えるか:
問題の説明: メイン画面の左側 (カテゴリ) にツリービューがあり、画面の残りの部分 (製品) にグリッドがあります。最初に画面を開いた後、ツリー内のカテゴリが期待どおりに表示されます。しかし、リロード ボタンをクリックすると、ツリー ストアとグリッド ストアが再度読み込まれます。ここでは、いくつかのカテゴリが 2 倍になっています (第 2 レベルのノードはすべて 2 倍になっていると思います)。AJAX リクエストは、リクエストごとに同じデータを返します。
さらに奇妙なケース: 別のコンポーネントを開いてからこの画面に戻ると、カテゴリが完全にめちゃくちゃにレンダリングされます。
JSON 応答は次のとおりです (常に同じです)。
{
"user":{},
"data":{
"children":[
{
"category_apps":[{"name":"default text", "domain_id":"17"}],
"expanded":false,
"expandable":false,
"id":"category_with_unassigned_products",
"logo":"",
"children":[]},
{
"category_apps":[{"category_id":"8390","domain_id":"17","is_active":"1","name":"main category","name_type":"TEXT","url_path":"\/main-category"}],
"category_id":"8390",
"level":0,
"event_id":"1331",
"expanded":true,
"expandable":false,
"id":"main_category",
"logo":"\/media\/\/event\/1331\/categories\/8390_1376315425.jpg",
"image":"\/event\/1331\/categories\/8390_1376315425.jpg",
"children":[
{
"expanded":true,
"category_id":"8598",
"expandable":false,
"logo":"\/media\/\/event\/1331\/categories\/8598_1376315425.jpg",
"image":"\/event\/1331\/categories\/8598_1376315425.jpg",
"level":"1",
"children":[
{
"expanded":false,
"category_id":"8599",
"expandable":false,
"logo":"\/media\/\/event\/1331\/categories\/8599_1376315425.jpg",
"image":"\/event\/1331\/categories\/8599_1376315425.jpg",
"level":"2",
"children":[],
"category_apps":[{"category_id":"8599","domain_id":"17","is_active":"1","name":"sub subcategory","name_type":"TEXT","url_path":"\/main-category\/main\/sub-subcategory"}]
}
],
"category_apps":[{"category_id":"8598","domain_id":"17","is_active":"1","name":"main subcategory","name_type":"TEXT","url_path":"\/main-category\/main-subcategory"}]
}
]
}
]
}
}
これが子ノードの追加を担当するコードです-しかし、デバッグ後、ルートの2番目の子(上記のJSONを参照)が処理された後、ツリー内のノードがすぐに二重に表示されたり、一度にめちゃくちゃになったりすることがわかります...
appendChildToRecord: function(child, record, store)
{
var data = {};
data[store.proxy.reader.root] = child;
var newRecords = store.proxy.reader.read(data).records;
record.appendChild(newRecords);
return newRecords[0];
}
どんなアイデア、考え、助けも大歓迎です!
更新: ExtJS をバージョン4.1.1に戻すと、ツリーは常に適切に読み込まれます。したがって、バージョン 4.2.1 に切り替えた後にのみ問題が発生したことは明らかです。そして、デバッグ時に問題を明らかにすることさえできません-特定の時点で、main_category のノード サブツリー全体が一度にレンダリングされ、台無しになります...
更新 2 : ツリー構築プロセス全体をデバッグすることにより、カテゴリを再ロードすると、カテゴリとその子が間違った順序で処理されることがわかりました。処理されるとは、次の手順が実行されることを意味します。
- 第 1 レベルの第 1 カテゴリを取得する
- ルートに追加
- プロセス
children
(再帰的、ポイント 1 から開始) children
そのカテゴリのソースから削除する
最初のロード時に、カテゴリは正しい順序で処理されます
- カテゴリ 1 レベル
- カテゴリ 1 レベル
- カテゴリ 2 レベル
- カテゴリ3レベル
- カテゴリ 2 レベル
- カテゴリ3レベル
- ...
- カテゴリ 2 レベル
2 回目以降のロードでは (ブラウザー ウィンドウを更新せずに) 順序が変更されます。最初のレベルの 2 番目のカテゴリは最後のカテゴリとして処理されるため、2 番目のレベルのカテゴリが再度追加され、2 倍になります。
問題は、ストアの再ロード時にカテゴリ (ノード/レコード) の順序が変更されるのはなぜですか? JSON応答が変更されておらず、常に同じであることを確認しました...