2014-11-24 54 views
0

我正在創建一個Sencha觸摸xtype,它將包含一個不可見的輸入文件和一個按鈕;我想在按下按鈕時觸發彈出窗口來選擇一個文件。這是我迄今所做的:Extjs如何到達正確的組件

config: { 
    baseCls: 'imageFileField', 
    layout: 'hbox', 
    items: [ 
     { 
      xtype: 'label', 
      baseCls: Ext.baseCSSPrefix + 'form-label' 
     }, 
     { 
      xtype: 'container', 
      layout: 'hbox', 
      flex: 1, 
      items: [ 
       { 
        xtype: 'filefield', 
        hidden: true, 
        listeners: { 
         afterrender: function (cmp) { 
          cmp.fileInputEl.set({ 
           accept: 'image/*' 
          }); 
         } 
        } 
       }, 
       { 
        xtype: 'label', 
        baseCls: Ext.baseCSSPrefix + 'form-label' 
       }, 
       { 
        xtype: 'button', 
        margin: '5px', 
        docked: 'right', 
        ui: 'base_button', 
        iconCls: '', 
        width: '50px', 
        listeners: { 
         tap: function (view, e, eOpts) { 

         } 
        } 
       } 
      ] 
     } 
    ] 
}, 

我知道我應該把東西水龍頭方法中,導航到該項目,然後觸發事件。我嘗試過使用this.up()/ down(...),但我從來沒有能夠獲得隱形輸入。什麼是正確的「路徑」到達那裏?

回答

0

您可以使用Ext.ComponentQuery來查找元素並設置其屬性。要找到你的元素,你必須先將itemId賦值給它。

xtype: 'filefield', 
hidden: true, 
itemId: 'chooseFile', 
listeners: { 
       afterrender: function (cmp) { 
        cmp.fileInputEl.set({ 
        accept: 'image/*' 
        }); 
       } 
      } 

然後你可以把下面的代碼在按鈕的監聽事件。

listeners: { 
       tap: function (view, e, eOpts) { 
         Ext.ComponentQuery.query("container > #chooseFile").show(); 
        } 
      } 
+0

隨着Ext.ComponentQuery.query(「#chooseFile」),我最終選擇了它,但是當節目( )方法不顯示彈出窗口來選擇文件... – 2014-11-24 16:29:50

+0

嘗試Ext.ComponentQuery.query(「container> #chooseFile」)。hidden(false); – 2014-11-24 17:04:07

+0

自從我刪除'hidden:true'這一行已經有一段時間了,它沒有被觸發。 – 2014-11-24 17:05:29

0

我已經把所有的控件在控制器及其正常工作: -

refs: { 
     filefield: 'filefield[name="fileField"]', 
     fileBtn: 'button[name="fileBtn"]' 
    }, 

    control: { 
     "fileBtn": { 
      tap: function() { 
       this.getFilefield().show(); 
      } 
     } 
    }