电子事件多次触发

时间:2018-06-16 20:14:21

标签: javascript electron

我有一个页面,通过jquery加载新元素。我的页面有像

这样的事件监听器
ipcRenderer.send('getlist');
ipcRenderer.once('return:list', function (e, l, wn) {
    console.log('a');
    for(let i = 0; i < l.length; i++) {
        $('.a').append('<div>'+l[i]+wn[i]'</div>');
    }
    $('.a').append('<div>End</div>');
});

将数据发送到页面的代码:

ipcMain.on('getlist', function (e) {
    wn = [];
    cfg['a'].forEach(s => {
        wn.push(yaml.readSync('charcfg.yaml')['name']);
    });
    mainWindow.webContents.send('return:list', cfg['a'], wn);
});

在我加载另一个页面之前它完美无缺,并再次加载此页面。 此事件多次触发。每次我回到这个页面,都会更多次。

我尝试使用

ipcRenderer.once('someevent', function(e, l){...}); 

它只能运行一次。在第三次重新加载时,它会再次启动监听器。

此脚本的代码加载页面!

对不起我的英文。Layout of Database

通过jquery加载页面的函数:

const htmlContent = $('.content');
function setContent(s) {
    $('.content').animate({
        opacity: 0
    }, 200, function () {
        setTimeout(function () {
            htmlContent.load(s + '.html');
            $('.content').animate({
                opacity: 1
            }, 200);
        }, 100);
    });
}

1 个答案:

答案 0 :(得分:1)

实际上有两个听众会去两次。

绑定到加载页面的按钮的ipcRenderer.on(替换为.once)和jquery.on('click')。使用jquery.unbind().on('click')修复此问题。

感谢您的帮助,obermillerk。