Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Maquette中组件之间的通信_Javascript_Events_Components_Communication_Maquette - Fatal编程技术网

Javascript Maquette中组件之间的通信

Javascript Maquette中组件之间的通信,javascript,events,components,communication,maquette,Javascript,Events,Components,Communication,Maquette,我的问题是关于Javascript框架中组件之间的通信 假设我有一个菜单子组件用于应用程序组件:应用程序实例希望知道何时在菜单实例中选择菜单项,以便交换应用程序中显示的主要内容(例如)。换句话说,我需要一种在子组件和父组件之间通信的方法。如何在成型中实现这一点 当然,我可以将应用程序实例拥有的回调传递给菜单实例,当选择某个项目时将调用该实例。但是我有点不愿意这样做,因为“selection”事件只是菜单组件的一个“rendering side”方面,所以我希望事件不要泄漏到我的菜单API中,而是

我的问题是关于Javascript框架中组件之间的通信

假设我有一个
菜单
子组件用于
应用程序
组件:
应用程序
实例希望知道何时在
菜单
实例中选择菜单项,以便交换应用程序中显示的主要内容(例如)。换句话说,我需要一种在子组件和父组件之间通信的方法。如何在成型中实现这一点

当然,我可以将应用程序实例拥有的回调传递给菜单实例,当选择某个项目时将调用该实例。但是我有点不愿意这样做,因为“selection”事件只是菜单组件的一个“rendering side”方面,所以我希望事件不要泄漏到我的
菜单
API中,而是留在render函数/方法中

因此,我想谈谈“渲染方面”的事件。但我想这意味着我必须从
菜单
的渲染函数发送一个
CustomEvent
,并在
应用程序
的渲染函数中注册一个
CustomEvent
处理程序,对吗?maquette是否支持此用例?对于我的用例,
CustomEvent
还有其他替代方案吗

谢谢


PS:为了得到更多的答案,问题从ticket重新发布到这里。

我们通常做的是将回调传递给组件,这些组件在单击项目时被调用。例如,可以使用回调函数
menuItemClicked(menuItem:menuItem)
构建菜单。Imho这不会将任何特定于应用程序的知识泄漏到菜单/菜单项中。菜单的创建者可以在回调中执行任何操作,如路由或更改变量


当然,事件系统也是可能的。不过,我不建议使用DOM层次结构来冒泡事件。我可以想象
应用程序
使用
menu=createMenu(…)
创建菜单,然后调用
menu.addEventListener('itemClicked',navigate)
或其他东西。

为什么不建议使用DOM层次结构?因为性能问题,我认为使用DOM层次结构会使事情变得不必要的复杂。但我很好奇,事实是否如此。也许您可以制作一个JSFIDLE或codepen来演示如何实现这一点?我意识到,如果当前选定的项在click事件处理程序之外以编程方式更改,则可能还需要触发一个事件。。。因此,它不能只是一个仅渲染端的事件。我终于认为你的答案是正确的。