Frontmatter
| id | 8579 |
| title | Fix ListModel keyboard navigation for trees and filtered lists |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Jan 12, 2026, 8:03 AM |
| updatedAt | Jan 12, 2026, 8:07 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8579 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 12, 2026, 8:07 AM |
Fix ListModel keyboard navigation for trees and filtered lists

tobiu
Jan 12, 2026, 8:07 AM
Input from Gemini 3 Pro:
✦ I have updated
Neo.selection.ListModel.onListNavigateto prioritize record lookup via theactiveItem's DOM ID.This ensures that keyboard navigation correctly identifies the underlying record even when the DOM structure differs from the flat store (e.g., in
Neo.tree.Listwith collapsed nodes or future buffered lists). The previous index-based lookup is retained as a fallback.The fix is generic and benefits all lists inheriting from
ListModel.
tobiu assigned to @tobiu on Jan 12, 2026, 8:07 AM
tobiu closed this issue on Jan 12, 2026, 8:07 AM
The
Navigatoraddon calculatesactiveIndexbased on the current DOM state. ForNeo.tree.List, collapsed nodes are removed from the DOM (removeDom: true), causing the DOM item count to be smaller than the Store item count. This causesListModel.onListNavigateto retrieve the wrong record when usingstore.getAt(data.activeIndex). The fix is to usedata.activeItem(the DOM ID) to look up the record, which is robust against DOM/Store mismatches.