簡體   English   中英

將其他參數注入JavaScript回調函數

[英]Inject additional parameters into a JavaScript callback function

我花了很多時間試圖找到一個解釋我問題的標題,但並不容易。 隨意建議。

代碼如下:我正在使用谷歌可視化為我的圖表創建注釋。 注釋列使用自定義函數。 這是谷歌允許的,該功能將收到2個參數:dt和row。 問題是:下面應該是什么(dt,row,i),以便我得到默認的dt,函數通常接收的行和我的附加參數i?

view = new google.visualization.DataView(chartData);
var arr = [0];

for (var i = 1; i < chartData.getNumberOfColumns() ; i++) 
{
    arr.push(i);
    arr.push({role: "annotation", type: "string", calc: (function (dt, row,i)  {
        if (typeof (dt.getValue(row,i)) == "number" && dt.getValue(row,i) == 0) 
        {
            return ""; 
        }
        else 
        { 
            return dt.getValue(row, i).toString; 
        }
    })(dt, row, i)
});
}

view.setColumns(arr);
chartData = view.toDataTable();

我不知道我是否正確,但你可以使用更高階的功能:

var createCalc = function(i){
    return function(dt, row){
        if (typeof (dt.getValue(row,i)) == "number" && evs == 0) { return ""; }
        else { return dt.getValue(row, i).toString; }
    };
}

...
arr.push({role: "annotation", type: "string", calc: createCalc(i)});

假設您有一個函數createCalc ,它從回調中接收兩個參數dtrow ,並且您想要將其他參數i添加到它。 創建一個函數,

function createCalc(i, dt, row) {
  //functin code
}

並傳遞給,

arr.push({role: "annotation", type: "string", calc: createCalc.bind(null, i)});

bind將返回一個向其添加參數的新函數。 第一個參數,我傳遞的是null ,它實際上將被賦值給this變量,如果你在你的函數中使用this ,則傳遞適當的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM