bpmn-io/bpmn-js

Cannot use `bpmnjs.on` in module constructor when eagerly loaded

Open

#1 624 ouverte le 23 mars 2022

Voir sur GitHub
 (5 commentaires) (0 réactions) (0 assignés)JavaScript (1 249 forks)batch import
backlogbuggood first issuepr welcomespring cleaning

Métriques du dépôt

Stars
 (7 739 stars)
Métriques de merge PR
 (Merge moyen 17h 6m) (4 PRs mergées en 30 j)

Description

Describe the Bug

Given I have a module of the following structure:

const module = {
  __init__: [ 'custom' ],
  custom: [ 'type', Custom ]
}

function Custom(bpmnjs) {
  bpmnjs.on('diagram.init' /** can be any event */, () => console.log('hello.world'))
}

when I load it to bpmn-js, I get an error similar to the one below:

TypeError: this.get is not a function
    at Modeler.BaseViewer.on (BaseViewer.js?b392:559:1)
    at new ExecutionPlatform (execution-platform.js?5062:41:1)

This is due to injector (and modules) being instantiated before Diagram#get API is defined, cf. https://github.com/bpmn-io/diagram-js/blob/develop/lib/Diagram.js#L139 The BaseViewer tries to get the EventBus but get is not available yet.

Steps to Reproduce

See above.

Expected Behavior

No error. We could move the API declaration to the root of the module and use Diagram.prototype.get, but I haven't tested that.

Environment

  • Browser: [e.g. IE 11, Chrome 69]
  • OS: [e.g. Windows 7]
  • Library version: [e.g. 2.0.0]

Guide contributeur