2011-12-21 107 views
2

我想了解以下場景中的範圍。當撥打searchTerms時,this下的scope:this是指searchTerms功能,而不是面板本身。這似乎與我從其他例子中觀察到的不同。我可以知道我犯了什麼錯誤嗎?extjs按鈕範圍

function searchTerms(){ 
     var searchGrid = new Ext.grid.GridPanel({ 

     }); 

     var searchPanel = new Ext.form.FormPanel({ 
      region: 'south', 
      height:150, 
      items:[ 
      { 
       xtype: 'textfield', 
       fieldLabel: 'Keywords', 
      },{ 
       xtype: 'textfield', 
       fieldLabel: 'Label', 
      },{ 
       xtype: 'datefield', 
       fieldLabel: 'Valid till' 
      },new Ext.Button({ 
       text: 'crawl', 
       scope: this, 
       handler: function(b,e){ 
        Ext.Ajax.request({^M 
         url: '/discovery/tsearch',^M 
         params: {^M 
          keywords: this.items[0].getValue(), 
          label: this.items[1].getValue(), 
          valid: this.items[2].getValue(), 
         }, 
        }); 
       } 
      }),], 
     }); 

     var regionPanel = new Ext.Panel({ 
      title: 'search', 
      layout: 'border', 
      items: [searchPanel, searchGrid] 
     }); 

    return regionPanel; 
} 

回答

5

我想你的意思是這樣:

function searchTerms(){ 
    var searchGrid = new Ext.grid.GridPanel({ 

    }); 

    var searchPanel = new Ext.form.FormPanel({ 
     region: 'south', 
     height:150, 
     items:[ 
     { 
      xtype: 'textfield', 
      fieldLabel: 'Keywords', 
     },{ 
      xtype: 'textfield', 
      fieldLabel: 'Label', 
     },{ 
      xtype: 'datefield', 
      fieldLabel: 'Valid till' 
     }], 
    }); 
    searchPanel.add(new Ext.Button({ 
      text: 'crawl', 
      scope: searchPanel, 
      handler: function(b,e){ 
       Ext.Ajax.request({ 
        url: '/discovery/tsearch', 
        params: { 
         keywords: this.items[0].getValue(), 
         label: this.items[1].getValue(), 
         valid: this.items[2].getValue(), 
        }, 
       }); 
      } 
     }) 
    ); 
    var regionPanel = new Ext.Panel({ 
     title: 'search', 
     layout: 'border', 
     items: [searchPanel, searchGrid] 
    }); 

return regionPanel; 
} 
+0

可我知道爲什麼我的版本將無法正常工作? – goh 2011-12-21 11:31:49

+1

這是一個範圍問題,'this'是searchTerm對象,當您創建按鈕而不是searchPanel時,您必須考慮代碼在第一次執行時的分數,而不是事件發生時的分數 – RageZ 2011-12-21 11:33:17

+1

區別在於按鈕被*添加到searchPanel,範圍被設置爲searchPanel。爲了能夠將範圍設置爲searchPanel,必須首先定義searchPanel - 當您在searchPanel內創建按鈕* inline *時,這是不可能的。這是否使感覺? – Chau 2011-12-21 11:35:49