Node.js contextMenu click处理程序正在为错误的菜单项执行命令
在我的electron应用程序中,我有读取JSON文件并插入菜单项的代码:Node.js contextMenu click处理程序正在为错误的菜单项执行命令,node.js,menu,electron,Node.js,Menu,Electron,在我的electron应用程序中,我有读取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(o
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'
}))
}
var settingsdata=fs.readFileSync('./settings.json');
var jsonContent=JSON.parse(setingsdata);
for(var i=0;i
问题在于插入的菜单项的单击处理程序。即使
console.log(obj.parameters)
为每个项目显示了正确的不同参数,它也只对插入的最后一个项目执行命令,而不是单独执行命令。您应该在for
循环中将var
替换为let
var
的作用域是函数,因此在执行click
处理程序时,i
将设置为jsonContent.length
在for
循环中使用let
时,每次迭代都会得到一个新变量,可以在闭包中使用(即在案例中的单击处理程序)