Javascript Gia:如何通过eventbus将事件对象传递给处理程序

Javascript Gia:如何通过eventbus将事件对象传递给处理程序,javascript,event-handling,dom-events,Javascript,Event Handling,Dom Events,我正在学习如何使用(对于小型web项目),但我不知道如何通过Gia的eventbus将事件对象从一个组件传递到另一个组件的事件处理程序 以下是通过eventbus进行通信的两个基本组件: class navigation extends Component { constructor(element) { super(element); // // Define "Sub-components" this.ref = { navLinks: [],

我正在学习如何使用(对于小型web项目),但我不知道如何通过Gia的eventbus将事件对象从一个组件传递到另一个组件的事件处理程序

以下是通过eventbus进行通信的两个基本组件:

class navigation extends Component {
  constructor(element) {
    super(element);
    //
    // Define "Sub-components"
    this.ref = {
      navLinks: [],
    };
  }

  mount() {
    //
    // Listen for clicks on nav.-links
    for (let i = 0; i < this.ref.navLinks.length; i++) {
      const link = this.ref.navLinks[i];
      link.addEventListener("click", this.handleNavLinkClick.bind(this));
    }
  }

  handleNavLinkClick(e) {
    //
    // Emit event
    let clickedLink = e.target;
    if (clickedLink.classList.contains("callHeader")) {
      eventbus.emit("callingSubpageHeader");
    }
  }
}

class subpageHeader extends Component {
  mount() {
    //
    // Listen for call from eventbus
    eventbus.on(
      "callingSubpageHeader",
      this.handleEventBusCall_callHeader.bind(this)
    );
  }
  //
  // Eventbus handler(s)
  handleEventBusCall_callHeader() {
    console.log("The subpage-header was called.");
  }
}
不幸的是,没有示例,我不知道传递对象是如何工作的。我尝试将“something”(在本例中是在第一个组件中单击的链接)添加到emit函数的调用中,但不知道如何/在何处读取/使用该函数,也不知道是否将某个对象作为eventObject传递:

class navigation extends Component {
  constructor(element) {
    super(element);
    //
    // Define "Sub-components"
    this.ref = {
      navLinks: [],
    };
  }

  mount() {
    //
    // Listen for clicks on nav.-links
    for (let i = 0; i < this.ref.navLinks.length; i++) {
      const link = this.ref.navLinks[i];
      link.addEventListener("click", this.handleNavLinkClick.bind(this));
    }
  }

  handleNavLinkClick(e) {
    //
    // Emit event
    if (clickedLink.classList.contains("callHeader")) {
      eventbus.emit("callingSubpageHeader", [e.target]);
    }
  }
}
类导航扩展组件{
构造函数(元素){
超级(元素);
//
//定义“子组件”
this.ref={
导航链接:[],
};
}
挂载(){
//
//收听导航上的点击-链接
for(设i=0;i

如果有人能解释在这种情况下传递eventObject的概念和语法,那就太好了。

事件处理程序将事件中的对象作为参数传递给事件处理程序,因此处理程序可以从其函数签名中获取该对象作为变量,如下所示:

handleEventBusCall_callHeader(目标){
log(“调用了子页面头”);
}
事件处理程序中的变量
target
现在等于随事件传递的对象


调用事件时,不需要将参数放入
[]
中,这将在传递它之前将其放入一个数组中,这将在以后给您带来麻烦。文档中的括号表明,
eventbus.emit
的第二个参数是可选的。

太棒了,非常感谢您的解释,非常有意义。我还在学习,这对我帮助很大。
class navigation extends Component {
  constructor(element) {
    super(element);
    //
    // Define "Sub-components"
    this.ref = {
      navLinks: [],
    };
  }

  mount() {
    //
    // Listen for clicks on nav.-links
    for (let i = 0; i < this.ref.navLinks.length; i++) {
      const link = this.ref.navLinks[i];
      link.addEventListener("click", this.handleNavLinkClick.bind(this));
    }
  }

  handleNavLinkClick(e) {
    //
    // Emit event
    if (clickedLink.classList.contains("callHeader")) {
      eventbus.emit("callingSubpageHeader", [e.target]);
    }
  }
}