0

我正在使用带有 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();    
        });
});     

问题出在哪里?会是什么呢?为什么它工作一次而不是两次?

谢谢

4

1 回答 1

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();    
        });
});
于 2013-07-19T13:55:06.400 回答