管理バッジページでsave()関数をオーバーライドするのに苦労しています

バッジ機能を拡張するプラグインを作成しています。「保存」ボタンが管理者バッジページで押されたときに、追加のコードを実行したいと考えています。

Discourse Javascript:

Discourse hbs:

私のコード discourse/plugins/discourse-badge-extension/assets/javascripts/discourse/initializers/modify-admin-badges-show-controller.js:

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

export default {
  name: 'modify-admin-badges-show',

  initialize() {

    withPluginApi('0.8', api => {
      api.modifyClass('controller:admin-badges/show', {
        pluginId: 'discourse-badge-extension',
        actions: {

          save() {
            console.log("Custom pre-save logic triggered");
            alert("Pre-save logic");

            this._super(...arguments); // Call the original save method

            console.log("Post-save logic triggered");
            alert("Post-save logic");
          },
        }
      });

      alert("Hello! I am an alert box!!");
    });
  }
};

これはイニシャライザーです。

  • アラートボックス "Hello! I am an alert box!! がトリガーされ、コードがリロード時に実行されていることを示しています。
  • 保存時にコンソール.log行もアラートも実行されないため、オーバーライドが機能していないようです。
  • コントローラー名 controller:admin-badges/show はエラーを引き起こしません(ただし、意図的にタイプミスを追加するとエラーが発生するため、実際のコントローラーをターゲットにしていることが示唆されます)。

イニシャライザーが1つだけなので、再現は簡単はずです。何が間違っていますか?

Hey @piffy さん。残念ながら、これはJSの「ネイティブクラス構文」、EmberObjectの reopen() 機能、および @action デコレータ(これは技術的にはネイティブJSの「getter」を作成します)との非互換性です。

この特定のオーバーライドを機能させるための直接的な提案はありませんが、将来的にはより堅牢なソリューションに取り組んでいます(こちら)。

何をしようとしているかによっては、バッジモデルの「save」関数にフックすることで機能するかもしれません。

「いいね!」 3

迅速かつ包括的な回答をありがとうございます。他の保存機能についても確認させていただきます。

「いいね!」 3

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