如何在插件中为按钮添加操作

我想创建一个插件来显示一个按钮并执行某些操作。按钮已经可以显示在所需的位置,但我不知道如何为其创建自定义操作。文件结构如下:

plugins/discourse-my-plugin
├── assets
│   ├── javascripts
│   │   └── discourse
│   │       ├── initializers
│   │       │   └── my-plugin.js.es6
│   │       └── templates
│   │           └── connectors
│   │               └── user-messages-nav
│   │                   ├── actions.js.es6
│   │                   └── button.hbs
├── config
└── plugin.rb

initializers/my-plugin.js.es6

import { withPluginApi } from "discourse/lib/plugin-api";

function initializeButton(api) {
  api.decoratePluginOutlet('user-messages-nav', (elem, args) => {
    ...
  });
}
export default {
  name: "my-button",
  initialize() {
    withPluginApi("0.8.31", initializeButton);
  }
};

button.hbs

{{d-button class="btn-primary" action="submitContent" label="submit_content"}}

actions.js.es6 中这样创建自定义操作是否正确?错误提示是“had no action handler for: submitContent”,我该如何修复?

export default {
  actions: {
    submitContent() {
      ...
    }
  }
};
2 个赞

你做得非常接近了 :+1:

你只需要更改文件名。你的连接器类中的 .hbsjs.es6 文件必须具有相同的名称。因此,如果你将

actions.js.es6

更改为

button.js.es6

应该就能正常工作。你可以在此处阅读有关连接器类的更多信息

7 个赞

谢谢 Joe,效果非常好!

3 个赞