从另一个 widget 调用 widget 操作

您好,

我想从自定义按钮小部件中调用 toggleSearchMenu 操作,以便在单击它时打开搜索菜单。

我尝试了:

  click() {
    this.sendWidgetAction('toggleSearchMenu').then(() => console.log("SENDWIDGETACTION"));
  }

但是,当单击我的按钮时,控制台中显示 toggleSearchMenu not found

我尝试了其他不起作用的方法,您可以在此处看到:

import { createWidget } from "discourse/widgets/widget";
import { iconNode } from "discourse-common/lib/icon-library";
import { h } from 'virtual-dom';

export default createWidget("search-btn-widget", {
  tagName: "div.search-btn-widget",
  buildKey: () => "search-btn-widget",

  html(args) {
    let search_button_helper = "button#search-btn";
    let search_button_class;
    let search_title = "Chercher un sujet";
    let search_text = "Chercher un sujet";
    let search_icon = "ri-small-recherche";
    let search_label_helper = "span.d-button-label";

    if (args == "default") {
      search_button_class = "btn btn-default btn btn-icon-text";
    } else if (args == "primary") {
      search_button_class = "btn btn-primary btn btn-icon-text";
    } else {
      return;
    }

    const toggleSearch = function() {
      this.sendWidgetAction("toggleSearchMenu");
    };

    return h(
      search_button_helper,
      {
        className: search_button_class,
        title: search_title,
        // action: "toggleSearchMenu" => Not working
        // onclick: "toggleSearchMenu" => Not working
        onclick: toggleSearch
      },
      [iconNode(search_icon), h(search_label_helper, search_text)]
    )
  },
  // click() {
  //   this.sendWidgetAction('toggleSearchMenu').then(() => console.log("SENDWIDGETACTION"));
  // } => Not working
});

您有什么关于如何在我的小部件中调用此小部件操作的想法吗?如果可能的话?

非常感谢 :pray:

找到了一个解决方案,使用 createWidgetFrom 并导入 header widget:

import {
  default as header
} from "discourse/widgets/header";

这样我就可以访问作用域中的 toggleSearchMenu 操作方法了。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.