我正在使用带有ExtJS 4.2.1的treePanel。 我的问题很难解释。
我有两个按钮,一个树形按钮和一个清除按钮。
单击我的树按钮时,它会显示带有checkNodes的treePanel,以便您可以检查某些节点。我的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();
});
});
问题出在哪里?会是什么呢?为什么它只运行一次而不是两次?
谢谢
答案 0 :(得分:3)
您应该使用节点的set方法更改语句:
currentChild.set("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.set("checked", false);
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();
});
});