Built In Variables
Evolve supplies a small handful of built in variables. Some are available everywhere and some are available contextually. Referring to a built in that is not available in the context that your code is in will result in a compile error.
| Identifier | Always Available | Description |
|---|---|---|
$runtime | yes | This provides a reference to the runtime. See UIRuntime for api listings |
$root | no | Resolves to the top level ElementReference in a template declaration |
$element | no | Resolves to the 'current' ElementReference. Not available in top level function declarations or outside of an element context (ie inside a render block but part of a specific element) |
$parent | no | Resolves to the 'current' element's parent ElementReference. |
| `$oldValue | no | Available inside change handlers, refers the previous value |
| `$newValue | no | Available inside change handlers, refers to the new value |
| `$companion | no | Avaiable in any top level declaration that also supplied a companion type. Refers to the companion instance |
$text | no | Available inside typography elements and typography decorators. Resolves to the current TextReference |
$root, $element, and $parent
When inside of a top level declarations (except for function) you can always use $element to get the current element reference.
Inside of a render block, $element becomes contextual based on where it is used and is only valid inside a binding expression.
It is not valid inside a create, run, enable, var, state, repeat, if or any other expression that is not related to a
property or lifecycle binding.
In a given element usage like Text("xyz"), the $element reference becomes available inside of bindings.
When inside of a render block, you can refer to $root to get an
ElementReference for the current template root, in the example below it would point at Thing.
You can also use $parent to refer to an element's parent. This is available everywhere that $element is valid and always points to
the currently executing element's parent.
template Thing {
before:update => {
$element.SetAttribute("ticked", true); // in a top level declaration $element points to Thing
}
render {
Text($"the element is {$element}"); // refers to the Text element
Text($"the element is {$root}"); // refers to the Thing, which is the template root
run $element.SetAttribute("illegal", true); // $element points nowhere, this is not allowed
run $root.SetAttribute("illegal", false); // $root points to Thing, totally fine
run $parent.SetAttribute("fine, "yep"); // $parent points at Thing's parent. this MAY be invalid if Thing is a view root and has no parent.
Element1(value = $parent) { // $parent == Thing
Element2(value = $parent) { // $parent == Element1
}
}
}
Inside of a decorator, $element points to the element being decorated.
decorator SomeDecorator {
before:update => $element.stlye.BackgroundColor = `red`;
}