您好,我正在将一些类别添加为指向 Discourse 侧边栏顶部的独立链接,但当我点击这些链接时,与其他组件中的原生链接不同,单个链接或部分链接的 CSS active 状态不起作用。由于 active 状态不起作用,访客无法确定他们正在查看哪个页面。有什么方法可以解决这个问题吗?
active 状态正常工作:
active 状态不工作

您好,我正在将一些类别添加为指向 Discourse 侧边栏顶部的独立链接,但当我点击这些链接时,与其他组件中的原生链接不同,单个链接或部分链接的 CSS active 状态不起作用。由于 active 状态不起作用,访客无法确定他们正在查看哪个页面。有什么方法可以解决这个问题吗?
active 状态正常工作:
active 状态不工作

作为临时解决方案,您可以在插件/组件中使用此初始化程序:
import { withPluginApi } from "discourse/lib/plugin-api";
/**
* 此初始化程序的目的是在当前页面与侧边栏部分链接的 href 匹配时,
* 向该链接添加“active”类。理论上,这可以由 Discourse 核心处理,
* 但目前它不处理自定义链接,因此我们在此实现它。
*
* @see https://meta.discourse.org/t/active-state-not-working-for-added-links-in-the-sidebar-component/323422
*/
function initialize(api) {
// 非 Ember 视图的侧边栏部分链接的选择器。看起来 Ember 视图有自己的活动状态处理,
// 而非自定义链接则没有。
const LINK_SELECTOR = ".sidebar-section-link:not(.ember-view)";
const CLASS_ACTIVE = "active";
const applyClass = () => {
document.querySelectorAll(LINK_SELECTOR).forEach((link) => {
const href = link.getAttribute("href");
const toggle = window.location.pathname === href;
link.classList.toggle(CLASS_ACTIVE, toggle);
});
};
// 应用一次
applyClass();
// 在页面更改时也重新应用(便宜 + 弹性)
api.onPageChange(applyClass);
}
export default {
name: "sidebar-section-link-active-class",
initialize() {
withPluginApi(initialize);
},
};