Javascript 可变闭环(通过插件选项)
Javascript variable closure loop (through plugin option)
所以我得到了 jquery 图表,它使用刻度格式化程序来正确显示我的值。
图表可以有多个轴,为了正确生成它们,我使用了一个包含我的格式化程序函数的循环。
for (var i = 0; i < axis.xaxis.length; i++) {
var format = format || "HH:mm";
var tickFormatter = function(val, axis) {
return ValueToTime(Math.abs(val), format, true);
};
myAxes.xaxis.push({
tickFormatter: tickFormatter,
tickSize: tickSize,
position: thisPos || "left"
});
}
执行格式化程序时 format
是 undefined
因此我所有的标签也显示为“undefined
”。
是否可以将我的变量传递给函数?
请注意:该函数是在插件内部调用的,我不希望对其进行编辑,因为它是开源的。
使用另一个函数来创建不同的刻度格式器,这样您就可以在每个格式字符串上得到一个闭包:
function getTickFormatter(format) {
return function(val, axis) {
return ValueToTime(Math.abs(val), format, true);
};
}
for (var i = 0; i < axis.xaxis.length; i++) {
var format = format || "HH:mm";
var tickFormatter = getTickFormatter(format);
myAxes.xaxis.push({
tickFormatter: tickFormatter,
tickSize: tickSize,
position: thisPos || "left"
});
}
有关闭包的更多信息,请参阅以下问题:
- JavaScript closure inside loops – simple practical example
- How do JavaScript closures work?
所以似乎唯一建议的答案不太奏效...
然而,有效的是通过插件的选项传递我的格式变量。
for (var i = 0; i < axis.xaxis.length; i++) {
var format = format || "HH:mm";
var tickFormatter = function (val, axis) {
return ValueToTime(Math.abs(val), axis.options.format, true);
};
myAxes.xaxis.push({
tickFormatter: tickFormatter,
tickSize: tickSize,
format: format,
position: thisPos || "left"
});
}
我知道 flot 有一个 'time' 格式,但它的功能非常有限,尤其是当我的客户对细节非常挑剔的时候。
所以我得到了 jquery 图表,它使用刻度格式化程序来正确显示我的值。
图表可以有多个轴,为了正确生成它们,我使用了一个包含我的格式化程序函数的循环。
for (var i = 0; i < axis.xaxis.length; i++) {
var format = format || "HH:mm";
var tickFormatter = function(val, axis) {
return ValueToTime(Math.abs(val), format, true);
};
myAxes.xaxis.push({
tickFormatter: tickFormatter,
tickSize: tickSize,
position: thisPos || "left"
});
}
执行格式化程序时 format
是 undefined
因此我所有的标签也显示为“undefined
”。
是否可以将我的变量传递给函数?
请注意:该函数是在插件内部调用的,我不希望对其进行编辑,因为它是开源的。
使用另一个函数来创建不同的刻度格式器,这样您就可以在每个格式字符串上得到一个闭包:
function getTickFormatter(format) {
return function(val, axis) {
return ValueToTime(Math.abs(val), format, true);
};
}
for (var i = 0; i < axis.xaxis.length; i++) {
var format = format || "HH:mm";
var tickFormatter = getTickFormatter(format);
myAxes.xaxis.push({
tickFormatter: tickFormatter,
tickSize: tickSize,
position: thisPos || "left"
});
}
有关闭包的更多信息,请参阅以下问题:
- JavaScript closure inside loops – simple practical example
- How do JavaScript closures work?
所以似乎唯一建议的答案不太奏效...
然而,有效的是通过插件的选项传递我的格式变量。
for (var i = 0; i < axis.xaxis.length; i++) {
var format = format || "HH:mm";
var tickFormatter = function (val, axis) {
return ValueToTime(Math.abs(val), axis.options.format, true);
};
myAxes.xaxis.push({
tickFormatter: tickFormatter,
tickSize: tickSize,
format: format,
position: thisPos || "left"
});
}
我知道 flot 有一个 'time' 格式,但它的功能非常有限,尤其是当我的客户对细节非常挑剔的时候。