一个 A 框架组件上的 calling/triggering 方法的最佳实践是什么?
What is considered best practice for calling/triggering methods on one A-Frame Components from another?
例如,我有一个名为 table
的组件和一个系统 game
,它侦听包含获胜者列表的 SocketIO 事件(坐在 table 的玩家)。 game
系统有效地发出它接收到的相同事件,以便每个 A-Frame 组件都可以监听它们需要的事件。在我的例子中,当 table
“听到”game
系统发出的包含获胜者列表的事件时,我循环遍历每个并突出显示获胜者。目前我的粗略实现只是让 table
组件向与相应播放器具有相同 id 的元素添加一些文本。这可行,但在某些时候我想在 player
组件上调用一个函数,该函数可以做各种事情(例如播放声音、动画、改变颜色等)。
我可以看到有几种方法可以实现这一点:
- 获取
table
以 player
组件可以侦听并执行所需操作的方式为每个获胜玩家发出事件。
或
- 通过查找元素然后执行
playerEl.playWinningAnimation()
之类的操作,直接从 table 组件调用播放器组件上的函数
这些是否被认为是特别“糟糕的做法”?一种方法优于另一种方法的原因是什么?
我通常更喜欢发出事件,而不是直接调用函数。
一些好处:
- 如果其他组件尚未初始化,则不会发生崩溃。
- 如果您想将信息散布到多个实体,那就容易多了。
- 更改组件内的功能可能会破坏该组件外部的东西可能并不明显,而事件显然是一个外部接口,因此您不太可能想象可以在不破坏东西的情况下更改它们。
更容易测试单个组件(由于松耦合)。
也就是说,在某些情况下,直接调用组件的函数是合理的。
核心 A 框架中有一些示例,例如在光线投射器上。
https://aframe.io/docs/1.2.0/components/raycaster.html#methods
通常,使用函数而不是事件进行组件间通信的主要原因是当您需要返回 answer/data 时。也许也是出于性能原因(我已经看到对 DOM 事件的成本表示担忧,但我对此没有任何确切的量化。一般来说,我认为如果它在 tick() 函数之外,而不是发生 1000 次,我希望 DOM 事件就好了。
如果这是一种单向交流,并且不是非常频繁地发生,我想我几乎总是会去参加一个活动。
例如,我有一个名为 table
的组件和一个系统 game
,它侦听包含获胜者列表的 SocketIO 事件(坐在 table 的玩家)。 game
系统有效地发出它接收到的相同事件,以便每个 A-Frame 组件都可以监听它们需要的事件。在我的例子中,当 table
“听到”game
系统发出的包含获胜者列表的事件时,我循环遍历每个并突出显示获胜者。目前我的粗略实现只是让 table
组件向与相应播放器具有相同 id 的元素添加一些文本。这可行,但在某些时候我想在 player
组件上调用一个函数,该函数可以做各种事情(例如播放声音、动画、改变颜色等)。
我可以看到有几种方法可以实现这一点:
- 获取
table
以player
组件可以侦听并执行所需操作的方式为每个获胜玩家发出事件。
或
- 通过查找元素然后执行
playerEl.playWinningAnimation()
之类的操作,直接从 table 组件调用播放器组件上的函数
这些是否被认为是特别“糟糕的做法”?一种方法优于另一种方法的原因是什么?
我通常更喜欢发出事件,而不是直接调用函数。 一些好处:
- 如果其他组件尚未初始化,则不会发生崩溃。
- 如果您想将信息散布到多个实体,那就容易多了。
- 更改组件内的功能可能会破坏该组件外部的东西可能并不明显,而事件显然是一个外部接口,因此您不太可能想象可以在不破坏东西的情况下更改它们。 更容易测试单个组件(由于松耦合)。
也就是说,在某些情况下,直接调用组件的函数是合理的。
核心 A 框架中有一些示例,例如在光线投射器上。 https://aframe.io/docs/1.2.0/components/raycaster.html#methods
通常,使用函数而不是事件进行组件间通信的主要原因是当您需要返回 answer/data 时。也许也是出于性能原因(我已经看到对 DOM 事件的成本表示担忧,但我对此没有任何确切的量化。一般来说,我认为如果它在 tick() 函数之外,而不是发生 1000 次,我希望 DOM 事件就好了。
如果这是一种单向交流,并且不是非常频繁地发生,我想我几乎总是会去参加一个活动。