Например,
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, который ожидает аргумент model…