ExtJS 4.2.1树面板不刷新我想要的方式



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

相关内容

最新更新