كيفية إضافة إجراء لزر في الإضافة

أرغب في إنشاء إضافة (plugin) لعرض زر وتنفيذ إجراء معين. يمكن عرض الزر بالفعل في المكان المطلوب، لكنني لا أعرف كيفية إنشاء إجراء مخصص له. هيكل الملفات هو كالتالي:

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() {
      ...
    }
  }
};

لقد اقتربت جدًا :+1:

تحتاج فقط إلى تغيير اسم الملف. يجب أن يكون لكل من ملفات .hbs و js.es6 في فئة الاتصال (connector class) نفس الاسم. لذا، إذا قمت بتغيير

actions.js.es6

إلى

button.js.es6

فمن المفترض أن يعمل. يمكنك قراءة المزيد حول فئات الاتصال هنا

شكرًا لك يا جو، إنه يعمل بامتياز!