我是否需要在暂停时删除EventListener并在播放时添加addEventListener?

时间:2017-07-20 18:47:39

标签: aframe

我查看了帖子When do I need to call removeEventListener in my components?,但它没有解决我的问题。

我听说removeEventListener暂停和addEventListener播放时的最佳做法是为了在使用A-Frame检查器时保持一致(对其他组件)click的功能。因此,您的代码将如下所示:

AFRAME.registerComponent('my-component', {
  init: function() {
    this.doSomething = function() {
      console.log("I'm doing it")
    }
  },
  play: function() {
    this.el.addEventListener('click', this.doSomething)
  },
  pause: function() {
    this.el.removeEventListener('click', this.doSomething)
  }
})

在我看来,如果A-Frame检查员需要这样做才能正常工作,那么它应该为我处理这个问题,而不是让我为我添加的每个事件监听器做这件事。这个说法有什么价值吗?

除了A-Frame Inspector方面之外,是否会出现在场景部分初始化或部分破坏的情况下在事件处理程序中运行的代码可能导致难以诊断错误的情况?

1 个答案:

答案 0 :(得分:0)

重要的部分是:

  1. 在从场景中删除或分离实体后,事件侦听器会被清除。删除实体后,不仅会调用doFoo<Unrelated>()处理程序,而且.remove处理程序也会被调用。

  2. 是的,因此当Inspector打开时,事件侦听器不会运行。这在应用程序的上下文中可能不那么重要,但如果您要共享一个人们可能使用Inspector进行搜索的通用组件,则可能很有用。

  3. 在任何情况下,如果您要添加事件侦听器,您也可以使用.pause.play。它并没有伤害并确保在每种情况下都能干净利落地运行。