관리자 배지 페이지에서 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!!");  
    });
  }
};

이것은 초기화기(initializer)입니다.

  • "Hello! I am an alert box!!" 알림 창이 트리거되어, 코드가 재로드 시 실행되고 있음을 나타냅니다.
  • 저장 시 console.log 줄이나 알림이 실행되지 않아, 오버라이딩이 작동하지 않는 것 같습니다.
  • 컨트롤러 이름 controller:admin-badges/show는 오류를 발생시키지 않습니다(고의로 오타를 내면 오류가 발생하므로, 실제 컨트롤러를 대상으로 하고 있음을 시사합니다).

초기화기가 하나뿐이므로 재현하기는 쉬울 것입니다. 제가 뭘 잘못하고 있는 것일까요???

Hey @piffy. 불행히도 이것은 JS의 ‘네이티브 클래스 문법’, EmberObject의 reopen() 기능, 그리고 @action 데코레이터(기술적으로 네이티브 JS '게터’를 생성) 간의 호환성 문제입니다.

이 특정 오버라이드가 작동하도록 하는 즉각적인 해결책을 제안하기는 어렵지만, 앞으로 더 견고한 해결책을 마련하기 위해 작업 중입니다.

무엇을 하려 하느냐에 따라, 배지 모델의 “save” 함수에 훅을 걸면 작동할 수도 있습니다?

빠르고 상세한 답변 감사합니다. 다른 저장 함수를 확인해 보겠습니다.