【问题标题】:Electron event fires multiple times电子事件多次触发
【发布时间】:2018-11-26 05:38:00
【问题描述】:

我有一页,通过 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){...}); 

它只能使用一次。在第三次重新加载时,它会再次启动多次侦听器。

带有此脚本的代码随页面一起加载!

对不起我的英语。Output

通过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);
    });
}

【问题讨论】:

  • 在你的处理程序中发生了多次的到底发生了什么?更具体的上下文会有所帮助。
  • 它使用从事件接收的数据在页面上动态添加内容
  • 如果你编辑你的帖子会更好,这样我就可以看到它的格式,更容易解释。但究竟发生了什么多次?追加还是整个处理程序?
  • 好的,我编辑了我的帖子。多次附加从事件接收的文本。
  • 那么是否有像您最初的评论一样涉及的列表,还是只是静态附加?

标签: javascript electron


【解决方案1】:

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

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

感谢您的帮助,奥伯米勒克。

【讨论】:

  • 只是想补充一点,在我的例子中,我已经在我的 html 中手动包含了 renderer.js 并且它已经被 main.js 包含了,所以这就是为什么它为我触发了两次。
猜你喜欢
  • 2018-08-09
  • 2020-06-19
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多