Ist es möglich, Parameter an die API zu übergeben, die Community-Links erstellt?

z.B.

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

… wird fehlschlagen, weil diese Route eine Tag-ID benötigt.

Ich habe Folgendes versucht hinzuzufügen:

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

… aber ich vermute stark, dass dies nicht wie nötig von der API verarbeitet wird …

Ah, ich habe Fortschritte gemacht!

Es betrifft dies:

Genauer gesagt, ich glaube, es ist hier: discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub

Wenn wir das hinzufügen, sollte es funktionieren:

get models() {
 return args.models;
}

Oh, danke f
r die Er
ffnung!

Ach, und da es eine Bedingung typeof args === "function" gibt, könnten Sie sofort so etwas machen:

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");
    }

  }
);

Ja, das mache ich bereits … aber später im Prozess gibt es etwas Seltsames.

Aus irgendeinem Grund ist das nicht ganz richtig und ich bekomme eine Beschwerde über das Fehlen von postStream beim Klicken:

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");
          }
        };
      });

Es ist fast so, als ob man das Modell für die aktuelle Route einbeziehen müsste, was seltsam ist!

was ist die Ausgabe dieser Einstellung? Es scheint in Ordnung zu funktionieren, wenn ich es manuell mache:

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

Ja, das funktioniert, das ist wirklich hilfreich, danke!

Die Einstellung ist nur ein String. Ich habe es mir wohl zu kompliziert vorgestellt.

Der Name “models” für die Query-Parameter ist aber nicht zu 100 % intuitiv, oder?

Dein PR wird das viel übersichtlicher machen, danke!

Ja, es war mir auch nicht sofort klar, aber das liegt daran, dass es letztendlich die LinkTo-Komponente von Ember verwendet, die ein Modellargument erwartet…