Extjs-在创建自定义类时,自定义类中的组件不访问自定义类变量

时间:2013-05-03 04:39:02

标签: events extjs components

我已经创建了一个自定义组件,因为我的keyup事件上有一个文本字段,我需要过滤商店,但我没有在事件生成中获得任何变量,但在创建对象时我得到了对象。 下面是代码 - :

WildCardWindow = Ext.extend(Ext.Window, {
                      width  : 300,
                      height : 265,
                      resizable:true,
                      closeAction:'hide',
                      title:'WildCard Selection Window',
                      autoScroll:true,
                      iconCls:'icon-wildcard',
                      bodyStyle:'background-color:#FFFFFF',
                      //@cfg{Array} data-The array of fields/items to show in the window
                      data: null,
                      store:null,
                      /**
                       * @property
                       * @type String
                       * The message displayed when mouse over on an uncommitted field
                       */
                      uncommittMsg : '<b>Warning!</b> This field has been newly added in               
                                      the form designer. ' + 'It <i>can</i> be used now,  
                                      but you should be sure to save the uncommitted 
                                      changes ' + 'in the open form designer window.',
                      defaultIconCls : '',
                      initComponent : function(){
                                     this.createStore(this.data);
                                     this.items = this.createDataView();
                                     WildCardWindow.superclass.initComponent.call(this);
                      },
                      createDataView: function(){
                                     this.dataView = new Ext.DataView({
                                                  store: this.store,
                                                  autoWidth:true,
                                                  tpl: this.createTpl(),
                                                  autoHeight:true,
                                                  singleSelect : true,
                                                  overClass:'icon-view-over',
                                                  selectedClass:'icon-view-selected',
                                                  itemSelector:'.icon-dataview-item',
                                                  style:'cursor:pointer'
                                      });
                                      this.textField = new Ext.form.TextField({
                                          fieldLabel: 'To',
                                          tabTip:'Start typing to filter by field name', 
                                          name: 'f_to',
                                          enableKeyEvents :true,
                                          listeners: {
                                              keyup: function () {                                    
                        this.store.filter('name',this.textField.getValue(),true,false);
                        //Here I am not getting this.store and this.textField ??? 
                                          }}
                                      });
                                      return [this.dataView,this.textField]
                        },
                        createStore: function(data){
                                 this.store = new Ext.data.JsonStore({
                                             data:data,
                                             autoDestroy:true,
                                             fields:[
                                                 {name: 'id'},
                                                 {name: 'name'},
                                                 {name: 'fieldclass'},
                                                 {name: 'type'},
                                                 {name: 'options'},
                                                 {name: 'isMultiMember',type:'boolean'},
                                                 {name: 'isUnCommitted',type:'boolean'}
                                             ]
                                  });
                                  return this.store;
                          },
                          listeners:{
                                close: function(){
                                         this.store.filter('name','',true,false);
                                }
                          }
})

在textfield的密钥中我没有得到this.store和this.textfield ?? 任何建议或我错了。 请尽快回复

1 个答案:

答案 0 :(得分:0)

因为在调用该函数时会丢失范围。

你可以做两件事:

使用bind函数复制范围:

http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.Function-method-bind

我认为这也有效,是一个更优雅的解决方案:

var me = this;
this.textField = new Ext.form.TextField({
  fieldLabel: 'To',
  tabTip:'Start typing to filter by field name', 
  name: 'f_to',
  enableKeyEvents :true,
  listeners: {
    keyup: function () {                                    
      me.store.filter('name',this.getValue(),true,false);
    }}
});