node在active=false的情况下还能添加监听事件并且可以触发,是故意这样的还是其他什么原因,如果是故意这样的,是出于什么考虑呢?
动态添加监听是啥意思啊?而且我没有觉得哪里不妥啊,我就问问是故意这样的还是其他什么原因,如果是故意这样的,是出于什么考虑
添加是可以添加,但是应该不能触发
可是我这边测试在node.active = false的情况下,添加监听后会触发哦,不信男神你可以自己试试看
我的项目中这种情况不会触发
我这是在node的active = false的情况下添加监听哦,不是添加监听后再让node的active = fasle 哦
这应该是 bug,我们会再确认下
现有的实现中,emit 确实是会在 active = false 后仍然生效的,emit 是一个用户可以主动调用的 API,我认为这是一个合理设计。因为 active 在我理解中是:“引擎是否还主动调用这个节点,哪怕引擎不调用了,但它的逻辑还是正常的,可以被用户主动触发。”。
但是如果事件是通过派发(dispatchEvent)来调用的,就变成只有 active 的节点才会触发。因为派发事件是一个引擎内部行为,引擎不触发 active = false 的节点事件也更符合 UI 事件使用场景。
不知道这样回答你是否满意?
cc @panda
@atmy 是否只有 native 端有这个问题?Web 表现正常吗?
关于 emit,的确如 @jare 所说,是简单分发,不会去考虑节点是否生效,甚至不会管注册的对象是否是一个节点,它可以是任意对象,emit 的优势就是简单高效,复杂的依赖节点的事件分发需要用 dispatchEvent
谢谢大神的解答,我明白了
经过测试只有native端有这个问题,web端没有问题,谢谢大神
所以我现在在响应函数中加了
if(this.node.active==false)
return;
目前只能用这种方法来解决?
暂时也只有这种办法了,希望官方大神早日修复这个问题(虽然我根本不会遇到
)
关注这个 bug 是否解决。
