Architectural overview

This document provides a conceptual overview of the Caplin Renderers, to help you understand what constitutes a renderer.


Here is an example of a grid that is displaying indicative prices for four FX currency pairs

renderer examplegridbidask

The Renderer for the "Best Bid" and "Best Ask" columns is configured to:

  • Render stale prices with a strike through.

  • Flash prices with a green background for half a second when the indicative price increases.

  • Flash prices with a red background for half a second when the indicative price decreases.

The prices in the first two rows of this grid are current, the prices in the third row are stale (struck through), and the prices in the fourth row have just been increased.

Renderers are composed of Formatters, Stylers, Parsers, a Control and a Handler. They convert and style data held in JavaScript models and feed them into UI controls that display the data. They also manage any user interaction with the control and parse the data before notifying the JavaScript object that registers interest in data changes.

Renderer Components

renderer overview


Renderers pass data through formatters and stylers in the order they were defined.

Formatters: JavaScript classes that conform to the caplin.element.Formatter interface - for example caplin.element.formatter.ThousandsFormatter takes a value and inserts commas for each thousand position.

Stylers: Conform to the caplin.element.Styler interface - for example caplin.element.styler.ClassStyler applies a CSS class to a control dependant on the state of a variable.


Controls and their handlers deal with putting the data on the page, whilst handlers bind to DOM events and pass the data upstream to listeners of the renderer.

Control: Conform to the caplin.control.Control interface - for example the caplin.control.basic.InputControl is a standard HTML input text box that you can use in a Renderer.

Handler: Conform to the caplin.element.Handler interface - for example the caplin.element.handler.ChangeHandler will push data upstream to renderer listeners on keyUp and blur DOM events. But only if the value has changed.


Takes data from the control and transforms it into a form that any JavaScript listening to the renderer would like to consume. Parsers on the upstream channel are called in the order they are defined in XML.

Formatters: JavaScript classes that conform to caplin.element.Parser - for example the caplin.element.parser.DateParser takes a date and parses it into a configurable date format.

Configuring renderers

Renderers are configured using XML. They can be configured at aspect, bladeset or blade level within BladeRunnerJS depending how generic they are:


When the application is started, BladeRunnerJS bundles all XML files and they are loaded into the application. The caplin.element.factory.RendererFactory instantiates on application start and registers Renderers based on the XML loaded by the bundler.

See the Hello World example for an example of how to use Renderers through JavaScript. For full details on how to configure renderers using XML, you can refer to the Renderer XML Reference documentation.