我正在使用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();
});
});
问题出在哪里?可能是什么?为什么它只起一次作用而不起两次作用?
感谢
您应该使用节点的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();
});
});