Javascript Maquette中组件之间的通信
我的问题是关于Javascript框架中组件之间的通信 假设我有一个Javascript Maquette中组件之间的通信,javascript,events,components,communication,maquette,Javascript,Events,Components,Communication,Maquette,我的问题是关于Javascript框架中组件之间的通信 假设我有一个菜单子组件用于应用程序组件:应用程序实例希望知道何时在菜单实例中选择菜单项,以便交换应用程序中显示的主要内容(例如)。换句话说,我需要一种在子组件和父组件之间通信的方法。如何在成型中实现这一点 当然,我可以将应用程序实例拥有的回调传递给菜单实例,当选择某个项目时将调用该实例。但是我有点不愿意这样做,因为“selection”事件只是菜单组件的一个“rendering side”方面,所以我希望事件不要泄漏到我的菜单API中,而是
菜单
子组件用于应用程序
组件:应用程序
实例希望知道何时在菜单
实例中选择菜单项,以便交换应用程序中显示的主要内容(例如)。换句话说,我需要一种在子组件和父组件之间通信的方法。如何在成型中实现这一点
当然,我可以将应用程序实例拥有的回调传递给菜单实例,当选择某个项目时将调用该实例。但是我有点不愿意这样做,因为“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事件处理程序之外以编程方式更改,则可能还需要触发一个事件。。。因此,它不能只是一个仅渲染端的事件。我终于认为你的答案是正确的。