Frontmatter
| id | 9067 |
| title | Fix: Resolve Mapped KeyProperty Conflict in Turbo Mode via Store.getKey() |
| state | Closed |
| labels | bugcore |
| assignees | tobiu |
| createdAt | Feb 9, 2026, 3:11 AM |
| updatedAt | Feb 9, 2026, 3:44 AM |
| githubUrl | https://github.com/neomjs/neo/issues/9067 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 9, 2026, 3:44 AM |
Fix: Resolve Mapped KeyProperty Conflict in Turbo Mode via Store.getKey()
tobiu assigned to @tobiu on Feb 9, 2026, 3:11 AM

tobiu
Feb 9, 2026, 3:36 AM
Input from Gemini 3 Pro:
✦ I have resolved the critical
keyPropertyconflict that was breaking Grid selection in Turbo Mode.The Fix:
- Architecture: Implemented
Neo.data.Store#getKey(item).
- This helper acts as a bridge between Raw Objects (Turbo Mode) and Record Instances.
- It supports Reverse Mapping Lookup: If the Store uses a canonical key (e.g.
login) but the raw item only has the source key (e.g.l), it resolves the correct value using the Model definition.- Refactoring: Updated
Row.mjsand allSelectionModelclasses to usestore.getKey(record)instead of direct property access (record[key]), preventingundefinedlookups on instantiated records.- App Config: Updated
DevRank.store.Contributorsto use the correct canonicalkeyProperty: 'login'instead of the raw'l', ensuring architectural consistency.Outcome:
- Selection works correctly for both Raw Objects (Turbo) and Instantiated Records.
- "All Rows Selected" bug is eliminated (no more
undefined === undefinedmatches).
tobiu closed this issue on Feb 9, 2026, 3:44 AM
tobiu cross-referenced by #9069 on Feb 9, 2026, 3:55 AM
Resolve
keyPropertyaccess conflicts when using Mapped Fields in Turbo Mode (autoInitRecords: false).The Problem:
keyPropertypoints to the raw data key (e.g.'l').rawItem['l']works.RecordFactorycreates getters for canonical field names (e.g.login), but NOT for mapped source keys.record['l']isundefined.record[store.getKeyProperty()]. IfkeyPropertyis'l', this fails on instantiated records.The Fix:
Neo.data.Store#getKey(item): Implement a helper method to resolve the key regardless of item type.item[keyProp].item.get(keyProp).RowModel(and others) to usestore.getKey(record)instead of direct access.Goal: Transparently support mapped key properties in mixed Raw/Record environments.