2014-10-10 121 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集合的窗体的第一个后代。这只会给你一个单一的组件,所以你不必费心去从一个组件数组中取出一个组件。