我正在使用带有 ExtJS 4.2.1 的 treePanel。我的问题很难解释。
我有两个按钮,一个树形按钮和一个清除按钮。
当我单击我的树按钮时,它会显示一个带有 checkNodes 的 treePanel,因此您可以检查一些节点。我的树形面板中有一个有效的按钮来验证选择。单击此按钮后,选中的节点(准确地说是离开,但这是一个细节)将被添加到面板中。此面板是一个网格,它是您检查过的节点的列表。这个网格没有问题。我对这个按钮和我的网格没有任何问题,当我单击有效按钮时,选中的节点会正确地列在我的网格面板中。
当我单击不在我的树面板中的清除按钮时,它会清除我的所有选择,我的网格变为空,并且我的树中的所有节点都未选中(就像你从头开始一样)。
当我第一次这样做时它会起作用。我可以检查节点,单击有效按钮,它将正确地将我的项目添加到我的网格面板中(我的网格面板从未有任何问题,其中列出了我检查的节点)。如果我单击清除按钮,列表将变为空。然后,如果我单击我的树按钮,将出现树面板,如果我展开它,我可以看到选择已重新初始化,所有节点都未选中。
问题:如果我第二次执行相同的操作,它似乎工作得很好,但是树面板没有重新初始化。我单击树按钮,树面板出现,当我展开它时,我看到我之前检查的节点仍然被检查。问题是,当我想用一些查询我检查的节点时,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();
});
});
问题出在哪里?会是什么呢?为什么它工作一次而不是两次?
谢谢