Often when you retrieve a value from somewhere, you want to transform it in some way. For this purpose, Jitsu allows you to define a converter on any expression part. Converters provide a flexible way to do this transformation using simple javascript expressions.
Above, you'll see several examples of converters.
The basic form for specifying options is:
#[partType](path, option1:expr1, option2:expr2...)
For example, here's a binding using the convert option to convert the raw value into something suitable for display:
<j:Label text="#bind(item.age, convert:(val + ' years'))">
This takes the item's age property (a number) and converts it into a string like "12 years".
The val variable name is special within a convert expression - it represents the value that needs to be converted.
You can use bindings on any attribute and in elements, (not just on the special text attribute of a TextBox or Label). For example, you can do::
<div style="#bind(item.firstName, convert:(val == 'Joe' ? 'color:red' : 'color:blue')">
You can use converters to do all sorts of conversions, e.g. if you had defined some functions to escape HTML markup
function trim(str) { return str.replace(/^\s+/g, '').replace(/\s+$/g, ''); } function escapeHtml(str) { str = str.replace(/\</g, '<'); str = str.replace(/\>/g, '>'); str = str.replace(/\&/g, '&'); return str; }
You might use these in a binding like:
<j:Label text="#bind(item.age, convert: (escapeHtml(trim(val))">
The last binding example above also shows the convertBack option, which is used to convert values in the other direction - e.g. to take input from a text box and convert it back into the underlying value needed for an object.
<j:TextBox text="#bind(item.age, convert: (val * 12) + ' months', convertBack: parseInt(val / 12))">