ExtJS 4.2.1 TreePanel不刷新我想要的

时间:2013-07-19 12:38:35

标签: extjs view tree refresh store

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

问题出在哪里?会是什么呢?为什么它只运行一次而不是两次?

谢谢

1 个答案:

答案 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();    
        });
});