0

私はExtJS 4.2.1で作業しています

パネルを表示させるボタンがあります。

このパネルには、私のツリーパネル、その下の 5 つのチェックボックス、最後に 1 つの有効なボタン (ツリーパネルを閉じて、いくつかのノードをチェックしたという事実を有効にするため) と 1 つのキャンセル ボタン (ツリーパネルを作成するためだけ) が含まれています。

パネルを表示させることができ、正常に動作します。しかし、キャンセルまたは有効なボタンをクリックすると、パネルが非表示になり (OK)、次に表示しようとすると、ツリーパネルが含まれなくなり、5 つのチェックボックスと 2 つのボタン (注意、2 つのパネルが異なる場合、パネルには私のツリーパネルが含まれています)。

消える理由がないのでわかりません。ツリーパネルを確認すると、ツリーパネルがまだ存在し、適切に埋められていることconsole.log()がわかります。treepanel.store.tree.root通過するtreepanel.view.allと、正しい要素がビューに表示されていることがわかります。しかし、treepanel.body.domクロムのデバッグでチェックすると、要素がどこにあるのかわかりません (通常、クロムのデバッグでマウスを使用して dom を通過すると、ページの対応する部分が色付きで表示されます)。

これが私のコードの関係する部分です:

var button = Ext.get('ProductSelectionButton');
var treeSelector = createTree('stAddAction.do?action=product_tree_selector', 550, 490, '', 'lbl_st_tree_selection_empty', true, 'productlist');

 button.on('click', function(){
    treeSelector.store.proxy.url = 'stAddAction.do?action=product_tree_selector';
    treeSelector.store.reload();
    var productPanel = Ext.create('Ext.FormPanel',{
                fieldDefaults:{
                    labelWidth: 75 // label settings here cascade unless overridden
                },
                frame:true,
                title: document.getElementById('applicability').innerHTML + ' - ' + document.getElementById('lbl_st_product_tree_win').innerHTML,
                style:'padding: 5px 5px 0; margin-top: 0;',
                width: 550,

                items: [treeSelector, 
                {
                    xtype: 'checkboxgroup',
                    items: [
                        {boxLabel: document.getElementById('lbl_status_deleted').innerHTML, name: 'status_2', checked: false, ctCls:'check-status-2',
                            listeners: {
                            change: function(newValue, oldValue, eOpts ){
                                if(newValue.checked){
                                    // To show items with status 2 which is Deleted status
                                    Ext.Array.remove(statusToHide, "2");
                                    ProductList.showIdsStatus(2);
                                }
                                else{
                                    // To hide items with status 2 which is Deleted status
                                    Ext.Array.push(statusToHide, "2");
                                    ProductList.hideIdsStatus(2);
                                }
                            }
                        },
                        ... four others checkboxes
                }],
                 buttons: [{
                    icon : 'img/st_little_valid.png',
                    style:'width:20px!important;',
                    handler: function(){

                            var data = '',
                            selNodes = treeSelector.getCheckedNodes(treeSelector.getRootNode());
                            precedentlyCheckedNodes = selNodes;
                            xhr = getXhr();
                            xhr.onreadystatechange = function(){
                                if (xhr.readyState == 4 && xhr.status == 200) {
                                    var myLoad = eval(myDataGrid);
                                    productgrid.store.loadData(myLoad);
                                    productgrid.getView().refresh();
                                    win.hide();
                                    enableSave();
                                }
                            }
                            var params = "action=set_iceproduct&datatoadd=" + data + "&datatoremove=" + strUnchecked;
                            xhr.open("POST", "stAddAction.do", true);
                            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                            xhr.setRequestHeader('Content-length', params.length);

                            xhr.send(params);
                        }
                    },

                    {
                        icon : 'img/st_little_cancel.png',
                        handler: function(){
                    /* restore all nodes how they were before (checked or unchecked) */
                            treeSelector.verifyCheckedNodes(precedentlyCheckedNodes);
                            win.hide();

                    /* Only expand the first level */
                            treeSelector.collapseAll();
                            treeSelector.getRootNode().expand();

                        }
                    }]
               });

それが本当に明確かどうかはわかりません...とにかく、どんなアイデアでも歓迎できます! このツリーパネルがパネルから消えて、まだ存在しているなんて!

ありがとうございました

4

1 に答える 1

1

Ext.create毎回ボタンクリックイベント関数を呼び出しています。つまり、初めて作成しても問題ありません。ただし、ボタンをもう一度クリックすると、同じ構成の別のパネルが作成されますが、すでに別の場所にあるため、両方に treeSelector を含めることはできません。コードを次のように変更します。

var button = Ext.get('ProductSelectionButton');
var treeSelector = createTree('stAddAction.do?action=product_tree_selector', 550, 490, '', 'lbl_st_tree_selection_empty', true, 'productlist');

 button.on('click', function(button){
    treeSelector.store.proxy.url = 'stAddAction.do?action=product_tree_selector';
    treeSelector.store.reload();
    if(!button.productPanel)
    {
        button.productPanel = Ext.create('Ext.FormPanel',{
            fieldDefaults:{
                labelWidth: 75 // label settings here cascade unless overridden
            },
            frame:true,
            title: document.getElementById('applicability').innerHTML + ' - ' + document.getElementById('lbl_st_product_tree_win').innerHTML,
            style:'padding: 5px 5px 0; margin-top: 0;',
            width: 550,

            items: [
                treeSelector, 
                {
                    xtype: 'checkboxgroup',
                    items: [
                        {boxLabel: document.getElementById('lbl_status_deleted').innerHTML, name: 'status_2', checked: false, ctCls:'check-status-2',
                            listeners: {
                            change: function(newValue, oldValue, eOpts ){
                                if(newValue.checked){
                                    // To show items with status 2 which is Deleted status
                                    Ext.Array.remove(statusToHide, "2");
                                    ProductList.showIdsStatus(2);
                                }
                                else{
                                    // To hide items with status 2 which is Deleted status
                                    Ext.Array.push(statusToHide, "2");
                                    ProductList.hideIdsStatus(2);
                                }
                            }
于 2013-07-25T14:26:48.510 に答える