在我的电子应用程序中,我有读取JSON文件并插入菜单项的代码:
var settingsdata = fs.readFileSync('./settings.json');
var jsonContent = JSON.parse(settingsdata);
for (var i = 0; i < jsonContent.length; i++) {
var obj = null;
obj = jsonContent[i];
console.log(obj.label);
console.log(obj.parameters);
contextMenu.insert(0,new MenuItem({
label: obj.label,
click: function() {
child_process.execFileSync(vExecutablePath, obj.parameters)
},
position: 'before'
}))
}
问题出在插入菜单项的单击处理程序上。它只对插入的最后一个项目执行命令,而不是单独执行,即使console.log(obj.parameters)
为每个项目显示了正确的不同参数。
发布于 2018-06-04 07:57:47
您应该在for
循环中将var
替换为let
。
var
的作用域是函数,因此在执行click
处理程序时,i
将被设置为jsonContent.length
。
当在for
循环中使用let
时,您将在每次迭代中获得一个新变量,该变量可在闭包中使用(即在本例中的click
处理程序中)。
https://stackoverflow.com/questions/50666929
复制相似问题