2014-10-10 88 views
0

我有一個字段集顯示和隱藏功能的問題。 在我的左側的應用程序中,我有一個更改偵聽器的組合框。在右側,我有幾個不同的文本框顯示和隱藏根據選擇組合框中的值。 每個隱藏和顯示功能都與字段集一起工作,但是如果我不能顯示/隱藏字段集。 Fieldset引用是可見的,我可以用console.log()函數列出這個組件。extjs4 fieldset.show()和fieldset.hide()不是功能問題

這裏有一塊我的代碼:

var rigthPanelLeftContainer = { 
     flex: 1, 
     minWidth: 200, 
     defaults: { 
      xtype: 'textfield', 
      minWidth: 180, 
      anchor: '100%' 
     }, 
     items: [ 
//some working textfields here 
{ 

     xtype: 'fieldset', 
     labelWidth: 160, 
     anchor: '100%', 
     height: 40, 
     itemId: 'remarkId', 
     title: 'title'], 
     hidden : !ifHideIt, //boolean 
        items: [{ 
      xtype: 'text', 
      height: 25, 
      text: 'sometext'] 
     }] 
} 
]}; 

var comboBoxConnectors = { 
     xtype: 'combobox', 
     fieldLabel: Ext.translations.map['field.label.common'], 
     store: Ext.state.Manager.get('conTypes'), 
     editable: false, 
     queryMode: 'local', 
     name: 'conType', 
     itemId: 'conTypeField', 
     value: connObj === null ? conTypes[0] : connObj.type, 
     labelWidth: 160, 
     anchor: '100%', 
     listeners: { 
      change: function(obj, newValue, oldValue) { 

      //many hide/show working on textfield functions 

      var remarkId = me.query('#remarkId'); 
      console.log(remarkId); //returns my fieldset element 
      remarkId.hide(); //returns remarkId.hide is not a function 
     } 
} 
} 

我真的需要你的幫助的傢伙,什麼問題呢?

回答

1

在你的代碼中,你有一條評論說me.query('#remarkId')返回你的fieldset元素。這在技術上不正確。假設me.query()是一個組件查詢,你實際得到的是一個數組的匹配組件。那麼,你會得到未定義的函數錯誤,因爲絕大多數情況下,數組沒有hide()方法。如果你訪問數組中的第一個元素,然後調用hide()方法,它應該可以工作。

但是,您應該也可以考慮對此做些改變。我們可以使用內置的遍歷方法來查找正確的組件,而不是使用query()(它可能總是一個,但不一定是......)獲取數組。例如,假設組合框和fieldset都是同一個窗體面板的子項,你可以這樣做:mycombobox.up('form').down('fieldset#remarkId')。這基本上指示代碼遍歷組件層次結構到最近的窗體,然後深入到帶有itemId爲「remarkId」的fieldset集合的窗體的第一個後代。這隻會給你一個單一的組件,所以你不必費心去從一個組件數組中取出一個組件。