2014-01-23 2 views
0

initComponent에서 함수를 호출하려고합니다. 그러나이 객체의 범위를 가져올 수 없으므로 ReferenceErrors로 실행됩니다. 내가 호출하는 함수는 getFileType이며 범위가 누락되어있어 가져올 수 없습니다. (라인 번호 204). 핸들러 내부에서 범위를 변경하는 방법이 있습니까? 또한참조로 인한 패널의 참조 오류

는 범위를 추가하여 :이 버튼 안에, 내가 여기에 어떤 도움이 좋지 않을까 ... 양식 데이터를 선택하는

을 범위를 잃고!

Ext.define('D.application.component.de.AddConnectionPanel', { 
extend: 'Ext.form.FieldSet', 

initComponent : function() 
    { 
      var databaseConnDetails = Ext.create('Ext.form.Panel',{ 
          bodyPadding: 15, 
         // width:'auto', 
          region:'center', 
          layout:{ 
           align: 'center', 
          }, 
          defaults: { 
           anchor: '100%', 
          }, 
          title: 'Database Details', 
          items: [{ 
            defaults: { 

            }, 
            items: [{ 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqcombobox', 
              name: 'DB_TYPE', 
              emptyText: 'DB Type', 
              flex: 1, 
              fieldID: 'Field-1', 
            }], 
            layout: 'hbox', 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_1', 
          }, 
          { 
            defaults: { 

            }, 
            items: [{ 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextfield', 
              name: 'DB_URL', 
              emptyText: 'DB Url', 
              flex: 1, 
              fieldID: 'Field-2', 
            }, 
            { 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextfield', 
              name: 'DB_PORT', 
              emptyText: 'DB Port', 
              flex: 1, 
              fieldID: 'Field-3', 
            }], 
            layout: 'hbox', 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_2', 
          }, 
          { 
            defaults: { 

            }, 
            items: [{ 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextfield', 
              name: 'DB_SCHEMA', 
              emptyText: 'Schema Name', 
              flex: 1, 
              fieldID: 'Field-4', 
            }, 
            { 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextfield', 
              name: 'DB_LABEL', 
              emptyText: 'Schema Label', 
              flex: 1, 
              fieldID: 'Field-6', 
            }], 
            layout: 'hbox', 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_4', 
          }, 
          { 
            defaults: { 

            }, 
            items: [{ 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextarea', 
              name: 'DB_DESCRIPTION', 
              emptyText: 'Connection Description', 
              flex: 1, 
              fieldID: 'Field-6', 
            }], 
            layout: 'hbox', 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_6', 
          }, 
          { 
            defaults: { 

            }, 
            items: [{ 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextfield', 
              name: 'DB_USERNAME', 
              emptyText: 'DB Username', 
              flex: 1, 
              fieldID: 'Field-5', 
            }, 
            { 
              readOnly: false, 
              hidden: false, 
              xtype: 'dsqtextfield', 
              name: 'DB_PASSWORD', 
              inputType: 'password', 
              emptyText: 'DB Password', 
              flex: 1, 
              fieldID: 'Field-6', 
            }], 
            layout: 'hbox', 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_7', 
          }, 
          { 
            defaults: { 

            }, 
            items: [{ 
              readOnly: true, 
              hidden: true, 
              xtype: 'dsqtextfield', 
              name: 'ID', 
              emptyText: 'Connection ID', 
              flex: 1, 
              fieldID: 'Field-6', 
            }], 
            layout: 'hbox', 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_8', 
          }, 
          { 
            defaults: { 

            }, 
            items: [{ 
             readOnly: false, 
             hidden: false, 
             width:70, 
             xtype: 'dsqbutton', 
             name: 'save', 
             fieldLabel: 'Save', 
             fieldID:'Field-8', 
            }], 
            layout: { 
             type: 'hbox', 
             align: 'middle', 
             pack: 'center' 
            }, 
            xtype: 'dsqfieldcontainer', 
            layoutID: 'Contain_9', 
          }], 
          xtype: 'dsqfieldset', 
          layoutID: 'Connection Details' 
      }); 

      var fileConnDetails = Ext.create('Ext.form.Panel', { 
          bodyPadding:15, 
          defaults: { 
           anchor:'100%', 
          }, 
          width:500, 
          title: 'File Details', 
          bodyPadding: 10, 
          frame: true, 
          renderTo: Ext.getBody(), 
          items: [{ 
           xtype: 'filefield', 
           name: 'InputFile', 
           id:'filefield', 
           emptyText: 'File', 
           msgTarget: 'side', 
           allowBlank: false, 
           anchor: '100%', 
           buttonText: 'Browse...' 
          }], 

          buttons: [{ 
           text: 'Upload', 
           layout:{ 
            pack:'center', 
            align:'middle', 
           }, 
           handler: function() { 
            var form = this.up('form').getForm(); // Get form details 
            if(form.isValid()){ 
             var fileName = form.findField('filefield').getSubmitValue();          
             // Check to see if file type is supported 
             var retVal = getFileType(fileName); 
             if (retVal != DSQ_SUCCESS){ 
              Ext.Msg.alert('Unsupported File Type'); 
              return; 
             } 

             // Parse file and read data 
             retVal = parseInputFile(fileName, fileArray); 
             if (retVal != DSQ_SUCCESS) { 
              Ext.Msg.alert('Error! unable to read file'); 
              return; 
             } 

             form.submit({ 
              success: function(fp, action) { 
               Ext.Msg.alert('Success', 'Your file "' + action.result.file + '" has been uploaded.'); 
              }, 
              failure: function(fp, action) { 
               Ext.Msg.alert('Failed', 'File "' + action.result.file + '" upload failed'); 
              } 
             }); 
            } 
           } 
          }]        
      }); 

      var connectionInfo = Ext.create('Ext.container.Container', { 
        autoEl:'div', 
        width:700, 
        bodyPadding: 5, // Don't want content to crunch against the borders 
        layout:'card', 
        items:[{ 
         id:'file_card', 
         items:[fileConnDetails], 
        },{ 
         id:'db_card', 
         items:[databaseConnDetails], 
        }], 
      }); 

      var DataSourceOptionsContainer = Ext.create('Ext.container.Container',{ 
        region:'center', 
        layout:{ 
         type:'vbox', 
         align: 'center', 
        }, 
        items : [{ 
         xtype:'radiogroup', 
         vertical:false, 
         columns:2, 
         items: [{ 
           boxLabel: 'Flat-File', 
           name:'datasource', 
           inputValue:'flatfile', 
           width:80, 
           checked:true, 
          },{ 
           boxLabel: 'Database', 
           name:'datasource', 
           inputValue:'database', 
           width:80 
         }], 
         listeners: { 
          change: function(radiogroup, newVal, oldVal) { 
           var listenerObj = newVal.datasource; 
           switch(listenerObj) { 
            case 'database': 
             connectionInfo.getLayout().setActiveItem('db_card'); 
             break; 
            case 'flatfile': 
             connectionInfo.getLayout().setActiveItem('file_card'); 
             break; 
            default: 
             console.log("No such Object in connection group"); 
             break; 
           } 
          } 
         } 
        }], 
      }); 

      var config = { 
        items: [DataSourceOptionsContainer, connectionInfo] 
      }; 

      Ext.apply(this,config); 
      this.callParent(arguments); 
    }, 
    getFileType: function(fileName) 
    { 
     var fileTypesAllowed = [".csv", ".xls", ".xlsb"]; 
     alert("File Type verification"); 
     if(!Ext.Array.contains(fileTypesAllowed, fileName)) { 
      return 1; 
     } 
     return 1; 
    },  
    parseInputFile: function(fileName, fileArray) 
    { 
     return 1; 
    }, 
    onRender : function() 
    { 
      this.callParent(arguments); 
    } 
    }); 

답변

0

스토어 대신 지역 변수 사용 this에서 폼 패널 객체에 대한 참조 :

this.fileConnDetails = Ext.create('Ext.form.Panel', { 

(당신은 또한 this.fileConnDetails와 initComponent 함수에서 그 변수에 추가 참조를 바꿔야합니다)를

제안한대로 scope: this을 단추에 추가하십시오.

buttons: [{ 
    text: 'Upload', 
    layout:{ 
     pack:'center', 
     align:'middle', 
    }, 
    handler: function() { 
     var form = this.fileConnDetails.getForm(); // Get form details 
     if(form.isValid()){ 
      var fileName = form.findField('filefield').getSubmitValue();          
      // Check to see if file type is supported 
      var retVal = this.getFileType(fileName); 
      if (retVal != DSQ_SUCCESS){ 
       Ext.Msg.alert('Unsupported File Type'); 
       return; 
      } 

      // Parse file and read data 
      retVal = this.parseInputFile(fileName, fileArray); 
      if (retVal != DSQ_SUCCESS) { 
       Ext.Msg.alert('Error! unable to read file'); 
       return; 
      } 

      form.submit({ 
       success: function(fp, action) { 
        Ext.Msg.alert('Success', 'Your file "' + action.result.file + '" has been uploaded.'); 
       }, 
       failure: function(fp, action) { 
        Ext.Msg.alert('Failed', 'File "' + action.result.file + '" upload failed'); 
       } 
      }); 
     } 
    }, 
    scope: this 
}] 
+0

다음과 같은 오류가 발생합니다. TypeError : this.fileConnDetails가 정의되지 않았습니다. var form = this.fileConnDetails.getForm(); // 폼 세부 정보를 얻으십시오 – user3176314

+0

잘못된 업데이트를해서 죄송합니다 ... 잘되었습니다 ... 도움을 주셔서 감사합니다 ... – user3176314

0

getFileType이 클래스의 일부입니다 : 당신은 다음 양식 패널과 같은 범위에서 기능을 모두해야합니다. 다음을 추가해야합니다 :

scope: this, 
handler: function() { 
    // .... 
    this.getFileType(); 
} 
+0

작동하지 않습니다 ... 같은 오류가 다시 발생합니다 – user3176314

+0

이미 참조가 있습니다. 형태,'databaseConnDetails'. –

+0

매트의 제안에 따라 작동했습니다. 문제는 getFileType이 mainPanel의 일부인 것 같습니다. this.getFileType은 여전히 ​​범위를 찾을 수 없습니다. fileConnDetails를 포함시킨 후에는 모두 같은 범위에있었습니다. – user3176314

관련 문제