Hello world: using the renderer library
This short tutorial is going to quickly take you through the configuration and code required to configure a new renderer and apply it on an HTML element.
Define a Renderer
Renderer definitions are configured in XML. Each renderer contains a <control>
to display the value, a <downstream>
to format and style the value before it is displayed and an <upstream>
to parse the value before any listeners are notified of the changed data.
<renderer type="novox.novotrader.blade.amount">
<control type="caplin.control.basic.InputControl">
</control>
<downstream>
<transform className="caplin.element.formatter.ThousandsFormatter" />
</downstream>
<upstream>
<transform className="caplin.element.parser.AmountParser" />
</upstream>
</renderer>
Create and bind your Renderer
Renderers can be bound directly to HTML elements using the Renderer JavaScript API.
var oRendererFactory = caplin.element.ElementFactory.getRendererFactory();
var oRenderer = oRendererFactory.createRenderer("novox.novotrader.blade.amount", ["amount"]);
var eRendererHolder = document.getElementById("amountInputId");
eRendererHolder.innerHTML = oRenderer.createHtml();
oRenderer.bind(eRendererHolder.firstChild);
oRenderer.setValue("1000000"); // Displayed as 1,000,000
User inputs new data
The AmountParser
in the renderer definition allows users to enter shortcuts for large amounts, e.g. "4M" to represent "4 million".
Listen to Renderer Events
The example renderer definition is using a ChangeHandler
so this will fire the event "change" every time the value has changed.
oRenderer.addRendererEventListener({
onRendererEvent: function(oRenderer, oEvent) {
if (oEvent.type == "change")
{
alert("new value is " + oRenderer.getParsedValue()); // alerts "new value is 2000000"
}
}
});
Renderers use useful for:
-
Applying CSS classes and styles to data before it reaches the screen
-
Flashing the screen in price updates
-
Buffering fast-moving data to the screen
There are a number of existing renderer classes in the following packages:
You can also write your own by programming to the interface for each package.