Metadata "templated"
Nikita provides templating in configuration properties using the Handlebars templating engine. It traverses properties recursively and uses the same self-referenced object as a context. The templated metadata enables or disables templating.
Templating is disabled by default. Set metadata.templating to true to enable it. There is a performance penality to expect.
- Type:
booleanDefault:false, inherited from parent
All the properties from the current action are available including config and metadata.
You can traverse relative actions with the parent, siblings and sibling properties as well. Those last three properties will no longer be available once an action has resolved.
Once it is resolved, in addition to the config and metadata properties, the action exposes the children property as well as one of the output or error properties depending on its outcome.
Usage
You can access all the properties of the current action. Here is an example accessible the output of the previous sibling:
nikita
.call({
secret: 'my previous',}, function({config}) {
return `My secret is "${config.secret}"`
})
.call({
$templated: true, secret: '{{{sibling.output}}}',}, function({config}) {
console.info(config.secret) // Print `My secret is "my previous"`
})Dynamic references
It is not required to refer directly to a property. A property may refer to another property which itself refers to another property. Properties do not need to be set in any particular order. Their value is dynamically resolved and an error is thrown in case of a circular reference.
nikita({
secret: 'my precious',
$templated: true}, function(){
this.call({
my: 'My {{{config.secret}}}', // Note the usage of triple-stash to avoid escaping html entities
is: 'is "{{{parent.config.secret}}}"', secret: 'secret {{{config.is}}}' }, function({config}) {
console.info(config.my)
// Print `My secret is "my previous"`
})
})Accessing properties of resolved actions
The sibling property is no longer available once the action has resolved. The same goes for the parent and siblings properties. This example uses the parent and children properties:
nikita
.call({
secret: 'my previous',}, function({config}) {
return `My secret is "${config.secret}"`
})
.call(function({config}) {
// Call a child action
this.call({
$templated: true, // Note the usage of triple-stash to avoid escaping html entities
secret: '{{{parent.parent.children.[0].output}}}', }, function({config}) {
console.info(config.secret)
// Print `My secret is "my previous"`
})
})Desactivation
Templating is not enabled by default. If a parent action enables it, it can be desactivated with the value false:
nikita({
$templated: true})
// Call an action with templating (by default)
.call({
$templated: false, key_1: 'value 1',
key_2: 'value 2 and {{config.key_1}}'}, function({config}) {
console.info(config.key_2)
// Print "value 2 and {{config.key_1}}"
})Note, the value applies to the action and all its children.