هل من الممكن تمرير معلمات إلى واجهة برمجة التطبيقات التي تنشئ روابط المجتمع؟

مثال:

       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) الخاص بك هذا الأمر أكثر ترتيبًا، تحياتي!

نعم، لم يكن الأمر واضحًا بالنسبة لي في البداية أيضًا، ولكن هذا لأنه في النهاية يستخدم مكون LinkTo الخاص بـ Ember، والذي يتوقع وسيطة نموذج…