컴포저에서 카테고리가 선택될 때 특정 코드(테마 컴포넌트에서 가져온 것)를 실행할 수 있을까요? 컴포저가 방금 열렸을 때와 카테고리 드롭다운이 변경되었을 때 선택된 카테고리가 무엇인지 파악하는 데 관심이 있습니다.
컴포저 컨트롤러와 같은 컨트롤러나 컴포넌트를 수정하여 가능할 수도 있다고 생각했지만, 카테고리 정보를 찾을 수 없었습니다.
컴포저에서 카테고리가 선택될 때 특정 코드(테마 컴포넌트에서 가져온 것)를 실행할 수 있을까요? 컴포저가 방금 열렸을 때와 카테고리 드롭다운이 변경되었을 때 선택된 카테고리가 무엇인지 파악하는 데 관심이 있습니다.
컴포저 컨트롤러와 같은 컨트롤러나 컴포넌트를 수정하여 가능할 수도 있다고 생각했지만, 카테고리 정보를 찾을 수 없었습니다.
composer 컨트롤러에서 model.categoryId를 관찰하고, 값이 변경될 때 코드를 실행할 수 있습니다.
@fzngagan 감사합니다!
추가 질문인데, 이전에는 모델을 관찰(observed)해 본 적이 없었습니다
. 다음과 같이 작성해 보았는데 동작하는 것 같습니다.
const { observes } = require('discourse-common/utils/decorators');
api.modifyClass("controller:composer", {
@observes('model.categoryId')
getCategory() {
let categoryId = this.get("model.categoryId");
if (categoryId == null) return;
let category = this.site.categories.findBy("id", categoryId).name;
}
});
이것이 올바른 방법(또는 권장되는 방법)인가요? 그리고 id에서 카테고리 이름을 가져오는 가장 좋은 방법도 이 방식인가요?
model 객체에 어떤 내용이 포함되어 있는지 확인할 수 있습니다. 이미 카테고리 이름이 포함되어 있을 수도 있습니다.