EventBus API
About 1 min
EventBus API
EventBus is the publish/subscribe bus; subsystems communicate through it.
Import
const { EventBus, VjmapextEvents } = vjmapext;Usually use mapcadLayer.eventBus; no need to construct your own.
Methods
on(event, handler)
Subscribe.
| Parameter | Type | Description |
|---|---|---|
| event | string | Event name |
| handler | Function | Handler |
mapcadLayer.eventBus.on('entity:added', (data) => {
console.log('entity added:', data.entity.id);
});off(event, handler)
Unsubscribe. Pass the same function reference as in on.
| Parameter | Type | Description |
|---|---|---|
| event | string | Event name |
| handler | Function | Handler to remove |
emit(event, data?)
Emit an event.
| Parameter | Type | Description |
|---|---|---|
| event | string | Event name |
| data | any | Optional payload |
clear()
Remove all listeners.
VjmapextEvents
Typed event name constants:
const { VjmapextEvents } = vjmapext;
mapcadLayer.eventBus.on(VjmapextEvents.EntityAdded, handler);Event reference
Entity events
| Event | Constant | When | Payload |
|---|---|---|---|
entity:added | EntityAdded | Entity added to store | { entity } |
entity:deleted | EntityDeleted | Entity removed | { entity } |
entity:modified | EntityModified | Property change | { entity, styleOnly?: boolean } |
Tips
entity:modified with styleOnly: true means style-only change (e.g. color), not geometry—property UI can use this to refresh selectively.
Mouse events
| Event | Constant | When | Payload |
|---|---|---|---|
entity:mouseenter | EntityMouseEnter | Pointer enters entity | { entity, originalEvent } |
entity:mouseleave | EntityMouseLeave | Pointer leaves entity | { entity, originalEvent } |
entity:click | EntityClick | Click entity | { entity, originalEvent } |
entity:dblclick | EntityDblClick | Double-click entity | { entity, originalEvent } |
Selection events
| Event | Constant | When | Payload |
|---|---|---|---|
selection:changed | SelectionChanged | Selection changes | { selected: string[], deselected: string[] } |
Command and mode events
| Event | Constant | When | Payload |
|---|---|---|---|
command:started | CommandStarted | Command starts | { name } |
command:ended | CommandEnded | Command ends | { name } |
mode:changed | ModeChanged | Edit/browse toggles | { mode } |
Input events
| Event | Constant | When | Payload |
|---|---|---|---|
input:started | InputStarted | Input starts | — |
input:ended | InputEnded | Input ends | — |
boxselect:started | BoxSelectStarted | Box select starts | — |
boxselect:ended | BoxSelectEnded | Box select ends | — |
System events
| Event | Constant | When | Payload |
|---|---|---|---|
render:requested | RenderRequested | Render requested | — |
store:changed | StoreChanged | Store changed | — |
Example
const bus = mapcadLayer.eventBus;
bus.on(VjmapextEvents.SelectionChanged, ({ selected, deselected }) => {
console.log(`selected ${selected.length}, deselected ${deselected.length}`);
});
bus.on(VjmapextEvents.CommandStarted, ({ name }) => {
console.log(`command started: ${name}`);
});
bus.on(VjmapextEvents.ModeChanged, ({ mode }) => {
console.log(`mode: ${mode}`);
});