2016-11-09 54 views
0

我有以下函數聲明將參數傳遞給一個聲明的函數

var exportStore = function (exportVar) { 

    // Process export .cfc 

    var params_JSON = { 
     <cfoutput> 
     l_companyid: '#url.companyid#', 
     l_start: '#l_start#', 
     l_end: '#l_end#' 
     </cfoutput> 
    }; 

    if(exportVar == 'results') { 
     var exportQuery = Ext.getCmp('query'); 
     var query = exportQuery.getValue(); 
     params_JSON.query = query; 
    } 

    <cfoutput>var url = 'some url parameters' + Ext.JSON.encode(params_JSON)';</cfoutput> 

    //ajax call here returns link to export file 

    // display export link 
    var myForm = new Ext.form.Panel({ 
     title: 'Export File', 
     width: 300, 
     height: 200, 
     floating: true, 
     closable : true, 
     layout: { 
      type: 'hbox', 
      pack: 'center' 
     }, 
     items: [{ 
      xtype: 'displayfield', 
      name: 'export_file', 
      value: 'Click <a href="'+export file+'">here</a> to download file' 
     }], 
     buttons: [{ 
      margin: '0 10 10 0', 
      text: 'Close', 
      handler: function() { 

       this.up('form').destroy(); 

      } 
     }] 
    }); 

我試圖調用從具有下拉選擇按鈕此功能。

{ 
    text: 'Export All', 
    handler: exportStore 
}, 
{ 
    text: 'Export Search Results', 
    handler: exportStore 
} 

我的問題是你可以傳遞一個參數給一個聲明爲變量的函數嗎?我知道我可以給這兩個按鈕分配自己的處理程序,但該處理程序將包含相當多的代碼,並試圖簡化...只是想知道參數是否可以以某種形式傳遞給exportStore。 ....

{ 
     text: 'Export All', 
     handler: [ 
     exportStore, 
     extraParams: { exportVar: 'all' } 
     ] 
} 

回答

0

你可以使用Ext.bind()實現這個象下面這樣:

var exportStore = function (exportVar) { 
    // exportVar will have your 'all' or 'search' value as per the 
    // button clicked 
    ... 
} 

// In definition 
{ 
    text: 'Export All', 
    handler: Ext.bind(exportStore, undefined, ['all']) 
}, { 
    text: 'Export Search Results', 
    handler: Ext.bind(exportStore, undefined, ['search']) 
} 

您可以參考this fiddle的用法。

相關問題