Обработчик нажатия contextMenu выполняет команду для неправильного пункта меню - PullRequest
0 голосов
/ 03 июня 2018

В моем электронном приложении у меня есть код, который читает файл 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) показывает правильные различные параметры для каждого элемента.

1 Ответ

0 голосов
/ 04 июня 2018

Вы должны заменить var на let в цикле for.

var находится в области действия функции, поэтому к моменту выполнения обработчика click, iбудет установлен на jsonContent.length.

При использовании let в цикле for вы будете получать новую переменную на каждой итерации, которую можно использовать в замыкании (то есть в clickобработчик в вашем случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...