Skip to Content
JavascriptAdd logic using JavaScript

Add logic using JavaScript

Welcome to the Ensemble Javascript manual. It provides how-to guides, API reference documentation and examples.

Limitations

Ensemble’s javascript is a limited subset of the javascript you may be used to. It is used primarily for manipulating the JSON response from the server, performing UI logic when handling events or writing re-usable functions.

Following are the key limitations of the javascript in Ensemble.

  • Only supports ES5. Which means that it does not support any of the ES6 features listed here . There is no support for arrow function synatx (=>), let keyword and many other features you may be used to.
  • No support for importing libraries. Limited to what’s provided outside the box.
  • No support for .prototype or defining new objects. This may come in the future.

Let us know on our Discord server  if you need any of these capabilities or open a ticket 

Where is Javascript code used?

Javascript is the language to build your logic in Ensemble. It is used either as code blocks or as inline expressions. We discuss both below.

Code Block

Each code block must start with //@code as the first line. This tells the platform to process the text as code.

  • Use code blocks to handling events or processing API responses.
  • Each code block must be in the body of the executeCode action.

See below the two use cases where code blocks are used.

Handling Events

Specified as the executeCode action. Example -

Button: label: Click Me onTap: executeCode: body: | //@code myText.text = 'tapped out';

Process API responses

Another common place code blocks are used is when the API response has to be handled to extract values to be set on widgets or response to be set so that one or more item-template on the page may get the data in the format that they expect. See both examples below. Example 1: set widget property in API response

API: getDummyData: uri: https://dummyjson.com/users/1 method: GET onResponse: executeCode: body: | //@code myText.text = 'Got Response!';

Example 2: processing response and setting it for the item-template that are bound to this API to use

API: getDummyData: uri: https://dummyjson.com/users/1 method: GET onResponse: executeCode: body: | //@code //this will replace the response and be used by the item-templates that bind to this API response.body.data = [{"field1:"value1"}];

Inline Expressions and bindings

Use inline expressions for dynamically assigning values to widget properties. Inline expressions automatically update the properties of widgets by binding them to API responses or template data.

More details coming soon… TBD

Referencing Ensemble widgets and their properties inside javascript

All widgets on a screen can be referenced within the code block by their id field. This also means that ids need to be unique on a screen. Don’t set id on your re-usable custom widgets. No need to call a function, simply use the id of the widget and start accessing its properties. For example, if your widget has id: myText, you can reference it in code block or inside an expression as just myText. See below.

Column: styles: padding: 24 gap: 8 children: - Text: id: myText text: Hi there! - Button: label: Click Me onTap: executeCode: body: | //@code myText.text = 'tapped out';

Widgets within an item-template can be referenced by their index in the array using the this.selectedItemIndex syntax. For example.

ListView: id: listView onItemTap: navigateScreen: name: ListView - Detail Page inputs: doc_type: ${getPeople.body.users[this.selectedItemIndex]} styles: {expanded: true } itemTemplate: data: ${getPeople.body.users} name: users template: MyRow: inputs: p: ${users}

Core Libraries

Common Errors and Logging/Debugging

TBD

Last updated on