ExtJS 4.2.1 で treePanel を使用しています。私の問題は、説明するのが非常にデリケートです。
ツリーボタンとクリアボタンの2つのボタンがあります。
ツリー ボタンをクリックすると、checkNodes を含む treePanel が表示されるので、いくつかのノードを確認できます。選択を有効にするために、ツリーパネルに有効なボタンがあります。このボタンをクリックすると、チェックされたノード (正確には葉ですが、詳細です) がパネルに追加されます。このパネルはグリッドで、チェックしたノードのリストです。このグリッドで問題ありません。このボタンとグリッドに問題はありません。有効なボタンをクリックすると、チェックされたノードがグリッド パネルに正しく表示されます。
ツリー パネルにないクリア ボタンをクリックすると、すべての選択がクリアされ、グリッドが空になり、ツリーのすべてのノードがオフになります (最初から開始した場合のように)。
初めてやるときはうまくいきます。ノードをチェックし、有効なボタンをクリックすると、アイテムがグリッド パネルに正しく追加されます (チェックしたノードをリストするグリッド パネルに問題はありません)。クリア ボタンをクリックすると、リストが空になります。次に、ツリー ボタンをクリックすると、ツリー パネルが表示され、それを展開すると、選択が再初期化され、すべてのノードがオフになっていることがわかります。
問題 : 同じ操作を 2 度目に実行するとうまくいくように見えますが、ツリー パネルは視覚的に再初期化されません。ツリー ボタンをクリックすると、ツリー パネルが表示され、それを展開すると、以前にチェックしたノードがまだチェックされていることがわかります。問題は、チェックされたノードをいくつか調べたいときにconsole.log(currentChild.data.checked)
、チェックされた値が であることがわかりますfalse
。
したがって、データで動作しているように見えますが、ツリー パネルが正しく更新されません (操作を複数回実行した場合のみ)。
私の問題が正しく説明されているかどうかわかりません。以下は該当するコードの一部です。
var uncheck = false;
button.on('click', function(){
var treeSelector = createTree('stAddAction.do?action=product_tree_selector', 550, 490, '', 'lbl_st_tree_selection_empty', true, 'productlist');
treeSelector.on('load', function( node, records, successful, eOpts ){
if ( uncheck ){
node.tree.root.cascadeBy(function(currentChild){
if ( currentChild.data.checked ){
currentChild.data.checked = false;
currentChild.raw.checked = false;
currentChild.triggerUIUpdate();
console.log(currentChild);
}
});
}
uncheck = false;
});
buttonClear.on('click', function(){
uncheck = true;
treeSelector.store.proxy.url = "stAddAction.do?action=product_tree_selector";
treeSelector.store.load(treeSelector.getRootNode());
treeSelector.store.sync();
treeSelector.getView().refresh();
});
});
問題はどこだ?どうなり得るか?1 回は機能するのに 2 回は機能しないのはなぜですか?
ありがとうございました