2017-12-29 11 views
0

私はExtJSが非常に新しいです。私はスクリプト中にパネルを削除しようとしています。パネルは一度しか追加できません。瞬間、私はそれが私は基本的には、キャンセルボタンが押された場合には、パネルを削除し、追加のエラーExtJS 3.2一度パネルを追加することができます

TypeError: b.getPositionEl(...).dom is undefined 
 
Ext.layout.ContainerLayout<.isValidParent() 
 
ext-all.js:7 
 
Ext.layout.ContainerLayout<.renderAll() 
 
ext-all.js:7 
 
Ext.layout.ContainerLayout<.onLayout() 
 
ext-all.js:7 
 
Ext.layout.AutoLayout<.onLayout() 
 
ext-all.js:7 
 
Ext.layout.ContainerLayout<.layout() 
 
ext-all.js:7 
 
Ext.Container<.doLayout() 
 
ext-all.js:7 
 
Ext.Container<.doLayout() 
 
ext-all.js:7 
 
restart() 
 
RunScript:138 
 
h.Event.prototype.fire() 
 
ext-all.js:7 
 
h.Observable.prototype.fireEvent() 
 
ext-all.js:7 
 
.onClick() 
 
keyscript-all.js:4 
 
I()

を受ける再度追加してみてください。 [続行]ボタンを押すとすべてが表示され、新しいパネルが表示され、収集されたデータがレンダリングされ、エラーは表示されません。しかし、キャンセルボタンを押すと削除したいパネルは消えてしまいますが、optionPanelを追加しようとすると上記のエラーが表示されます。しかし、全く別のパネルを追加することはできますが、エラーは表示されません。

var workPanel = new CR.FormPanel({ 
 
    id: 'workPanel', 
 
    title: 'Bad Address Workflow', 
 
    region: 'center', 
 
    frame: true, 
 
    labelWidth: 300, 
 
    autoScroll: true, 
 
    bodyStyle: { 
 
     padding: '5px', 
 
     font: '12px arial,tahoma,helvetica,sans-serif' 
 
    }, 
 
    buttons:[ 
 
     { 
 
      text: 'Post', 
 
      listeners: { 
 
       click: doPost 
 
      } 
 
     }, 
 
     { 
 
      text: 'Cancel', 
 
      listeners: { 
 
       click: restart 
 
      } 
 
     } 
 
    ], 
 
    buttonAlign: 'left' 
 
}); 
 

 
var optionPanel = new CR.FormPanel({ 
 
    id: 'optionPanel', 
 
    title: 'Bad Address Workflow', 
 
    region: 'center', 
 
    frame: true, 
 
    labelWidth: 175, 
 
    bodyStyle:'padding:5px 5px 0', 
 
    defaults: { 
 
     width: 230 
 
    }, 
 
    items: [ 
 
     { 
 
     xtype: 'crOptionField', 
 
     crColumnDescription: 'Choose Bad Address Workflow', 
 
     crColumnName: 'workflowOptions', 
 
     crOptions: [ 
 
      ["",""], 
 
      ["0","Set Bad Address"], 
 
      ["1","Remove Bad Address"] 
 
     ] 
 
     } 
 
    ], 
 
    buttons: [ 
 
     { 
 
     text: 'Continue', 
 
     listeners: { 
 
      click: function(button,event){ 
 
       var fields = optionPanel.find('crColumnName','workflowOptions'); 
 

 
       if(parseInt(fields[0].crGetNewContents()) === 0){ 
 
        workflow = 0; 
 
        getMemberData(); 
 
       }else if(parseInt(fields[0].crGetNewContents()) === 1){ 
 
        workflow = 1; 
 
        getMemberData(); 
 
       }else{ 
 
        CR.Core.displayExceptions({ items: ['You have not selected an option.'] }); 
 
       } 
 
      } 
 
     } 
 
     } 
 
    ], 
 
    buttonAlign: 'left' 
 
}); 
 

 
var container = new Ext.Container({ 
 
    id: 'container', 
 
    frame: true, 
 
    region: 'center', 
 
    bodyStyle:'padding:5px 5px 0', 
 
    defaults: { 
 
     xtype: 'container' 
 
    } 
 
}); 
 

 
Ext.onReady(function(){ 
 
    
 
    container.add(optionPanel);   
 
    CR.Core.viewPort = new Ext.Viewport({ 
 
    layout: 'border', 
 
    region: 'center', 
 
    items: [container] 
 
    }); 
 

 
}); 
 

 
function restart(){  
 
    container.remove(workPanel); 
 
    container.add(optionPanel); 
 
    CR.Core.viewPort.doLayout(); 
 
} 
 

 
function getMemberData(){ 
 
    
 
    container.remove(optionPanel); 
 
    container.add(workPanel); 
 
    CR.Core.viewPort.doLayout(); 
 
    
 
    //My data collection process 
 
}

任意の助けを大幅に高く評価されています。

答えて

0

はい、複数の時間をcontainerに追加できます。あなたはビューからcomponentを削除するremoveメソッドを使用する場合は、このエラーの

TypeError: b.getPositionEl(...).dom is undefined

理由があるエラーを取得します。それはcomponentを永久にdomから削除します。もう一度試してみると、undefinedになるので、エラーTypeError: b.getPositionEl(...).dom is undefinedが作成されます。

componentreturnfunctionから作成する必要があります。

FIDDLEこのコードではデモを作成して修正しました。私はこれがあなたを導くか、あなたの要求を達成するのを助けることを願っています。

コードスニペット

Ext.onReady(function() { 
    //ReSet view set optionPanel 
    function restart() { 
     container.remove(Ext.getCmp('workPanel')); 
     container.add(optionPanel()); 
     doLayout(); 
    } 
    //Remove optionPanel and add workPanel in container 
    function getMemberData() { 
     container.remove(Ext.getCmp('optionPanel')); 
     container.add(workPanel()); 
     doLayout(); 
    } 
    //update layout of view 
    function doLayout() { 
     container.doLayout(); 
    } 
    //create and return work flow panel 
    var workPanel = function() { 
     return new Ext.FormPanel({ 
      title: 'Bad Address Workflow', 
      id: 'workPanel', 
      region: 'center', 
      frame: true, 
      labelWidth: 300, 
      autoScroll: true, 
      bodyStyle: { 
       padding: '5px', 
       font: '12px arial,tahoma,helvetica,sans-serif' 
      }, 
      buttons: [{ 
       text: 'Post' 
      }, { 
       text: 'Cancel', 
       listeners: { 
        click: restart 
       } 
      }], 
      buttonAlign: 'left' 
     }); 
    } 
    //create and return option panel 

    var optionPanel = function() { 
     return new Ext.FormPanel({ 
      id: 'optionPanel', 
      title: 'Bad Address Workflow', 
      region: 'center', 
      frame: true, 
      labelWidth: 175, 
      bodyStyle: 'padding:5px 5px 0', 
      defaults: { 
       width: 230 
      }, 
      items: [ 
       // create the combo instance 
       new Ext.form.ComboBox({ 
        typeAhead: true, 
        triggerAction: 'all', 
        lazyRender: true, 
        mode: 'local', 
        name: 'workflowOptions', 
        itemId: 'workflowOptions', 
        store: new Ext.data.ArrayStore({ 
         fields: [ 
          'myId', 
          'displayText' 
         ], 
         data: [ 
          ["", ""], 
          ["0", "Set Bad Address"], 
          ["1", "Remove Bad Address"] 
         ] 
        }), 
        valueField: 'myId', 
        displayField: 'displayText' 
       }) 
      ], 
      buttons: [{ 
       text: 'Continue', 
       listeners: { 
        click: function(button, event) { 
         //Get value of seleted value in combotbox 
         //using get component method 
         var value = Ext.getCmp('optionPanel').getComponent('workflowOptions').getValue(); 

         if (value === "0") { 
          workflow = 0; 
          getMemberData(); 
         } else if (value === "1") { 
          workflow = 1; 
          getMemberData(); 
         } else { 
          Ext.Msg.alert('Info', 'You have not selected an option.') 
         } 
        } 
       } 
      }], 
      buttonAlign: 'left' 
     }) 
    }; 
    //Main container that contains option and workflow panel. 
    var container = new Ext.Container({ 
     renderTo: Ext.getBody(), 
     frame: true, 
     region: 'center', 
     bodyStyle: 'padding:5px 5px 0', 
     defaults: { 
      xtype: 'container' 
     }, 
     items: [optionPanel()] 
    }); 
}); 
0

私は非表示を(使用することをお勧めいたします)とshow()メソッドの代わりに、remove()メソッドできます。

関連する問題