fix: Menu widget now triggers Router._onReplace for SPA URL tracking

Menu widget's menu_clicked() was bypassing the standard _buildWidget
path in bricks.js, so Router._onReplace was never called when navigating
via sidebar menu items. This caused:
- Browser URL not updating on menu clicks
- F5 refresh not restoring the current page

Added Router hook after t.add_widget(w) in menu_clicked(), matching
the same pattern used in bricks.js _buildWidget.
This commit is contained in:
yumoqing 2026-05-31 12:32:17 +08:00
parent 216221f67f
commit f49994cea7

View File

@ -70,11 +70,16 @@ bricks.Menu = class extends bricks.VScrollPanel {
"url":opts.url
}
}
var w = await bricks.widgetBuild(desc, this);
if (w && ! bricks.Factory.isWidgetType(w, 'Popup')){
t.clear_widgets();
t.add_widget(w);
} else {
var w = await bricks.widgetBuild(desc, this);
if (w && ! bricks.Factory.isWidgetType(w, 'Popup')){
t.clear_widgets();
t.add_widget(w);
// Router hook: notify SPA router of menu-driven navigation
if (bricks.Router && bricks.Router._enabled
&& opts.url){
bricks.Router._onReplace(t, opts.url);
}
} else {
console.log('menu_clicked():widgetBuild() failed', desc);
}
} else if (opts.script){