커뮤니티 링크를 생성하는 API에 매개변수를 전달할 수 있나요?

예를 들어

       api.addCommunitySectionLink({
         name: "intersection-navigator",
         route:"tags.intersection",
         title: I18n.t("tag_intersection_navigator.link.title"),
         text: I18n.t("tag_intersection_navigator.link.text")
       })

…는 해당 라우트가 tag_id를 요구하기 때문에 실패합니다.

다음과 같이 추가해 보았지만:

        params: { tag_id:  siteSettings.discourse_tag_intersection_navigator_all_word },
        model: { tag_id: siteSettings.discourse_tag_intersection_navigator_all_word },

… 이것이 api에 의해 필요한 방식으로 처리되지 않는다고 강력히 의심합니다 …

아, 진전이 있었어요!

이것과 관련이 있습니다:

구체적으로, 여기라고 생각합니다: discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub

이것을 추가하면 작동해야 합니다:

get models() {
 return args.models;
}

열어주셔서 감사합니다!

아 그리고 typeof args === "function" 조건이 있으므로, 바로 이렇게 할 수 있습니다:

api.addCommunitySectionLink((Base) =>
  class CustomLink extends Base {
    get name() {
      return "intersection-navigator";
    }

    get route() {
      return "tag.show";
    }

    get models() {
      return ["tagid"];
    }

    get title() {
      return I18n.t("tag_intersection_navigator.link.title");
    }

    get text() {
      return I18n.t("tag_intersection_navigator.link.text");
    }

  }
);

네, 그게 바로 제가 지금 하고 있는 거예요 … 그런데 그 과정에서 좀 웃긴 일이 하나 있어요

어떤 이유에선지 이게 정확히 맞지 않는 것 같고, 클릭할 때 postStream이 없다는 경고가 나옵니다:

api.addCommunitySectionLink((baseSectionLink) => {
        return class CustomSectionLink extends baseSectionLink {
          get name() {
            return "intersection-navigator";
          }

          get route() {
            return "tags.intersection";
          }

          get models() {
            return [{tag_id: siteSettings.discourse_tag_intersection_navigator_all_word}];
          }

          get title() {
            return I18n.t("tag_intersection_navigator.link.title")
          }

          get text() {
            return I18n.t("tag_intersection_navigator.link.text");
          }
        };
      });

거의 현재 라우트에 대한 모델을 포함해야 하는 것 같은데, 이게 좀 이상하네요!

그 설정의 출력값은 무엇인가요? 수동으로 이렇게 하면 잘 동작하는 것 같습니다:

get models() {
  return ["featured", "tv"];
}

네, 잘 작동하네요. 정말 도움이 됩니다. 감사합니다!

설정이 그냥 문자열이군요. 제가 너무 복잡하게 생각했던 것 같습니다.

다만 쿼리 파라미터 이름으로 "models"라는 표현은 100% 직관적이지는 않지 않나요?

PR이 이 부분을 훨씬 깔끔하게 만들어줄 것 같네요. 감사합니다!

네, 처음엔 저도 명확하지 않았지만, 결국 Ember의 LinkTo 컴포넌트를 사용하는데 이 컴포넌트가 model 인자를 기대하기 때문이죠…