AUR0111
Error Message
AUR0111: Ast eval error: expected "<name>" to be a function
Where <name> is the name of the property or variable that was expected to be a function.
Description
This error occurs during the evaluation of a binding expression when an attempt is made to call something as a function (e.g., doSomething(), item.process()), but the target of the call is not actually a function type at runtime.
Cause
The primary cause is that the variable or object property being invoked with () does not hold a function. This can happen for several reasons:
Incorrect Type: The variable/property holds a value of a different type (e.g., string, number, object, null, undefined) instead of a function.
Typo: The name of the function or the property containing the function is misspelled.
Scope Issue: The intended function exists but is not accessible from the current binding scope (e.g., it's not a property on the view model or not correctly imported/registered).
Conditional Logic: The variable might hold a function under some conditions but not others, and the call is attempted when it's not a function.
Lifecycle Issues: An attempt is made to call a method that is only defined or assigned later in the component lifecycle, or after certain asynchronous operations complete.
Solution
Verify Type: Ensure that the variable or property being called is indeed a function at the point of invocation. Use
console.logor a debugger to inspect its type (typeof variableName === 'function').Check Spelling: Double-check the spelling of the function or property name in the binding expression and the view model definition.
Confirm Scope: Verify that the function is defined on the view model or otherwise accessible within the binding's scope.
Handle Conditional Cases: If the property might not always be a function, add checks in your template or view model logic before attempting the call (e.g., using
if.bind="typeof myVar === 'function'"or conditional logic in the view model).Review Logic/Lifecycle: Ensure the function is defined and assigned before the binding expression tries to call it.
Example
<!-- Assume 'calculateValue' should be a function -->
<!-- Incorrect: 'calulateValue' is misspelled -->
<p>Result: ${ calulateValue() }</p>
<!-- Incorrect: 'user.process' is not a function (maybe it's a property) -->
<button click.trigger="user.process()">Process User</button>
<!-- Correct: Calling a function defined on the view model -->
<p>Result: ${ calculateValue() }</p>
<!-- Correct: Calling a method on an object property -->
<button click.trigger="user.activate()">Activate User</button>// View Model Example
import { customElement } from 'aurelia';
interface User {
name: string;
activate: () => void; // A function property
status: string; // A non-function property
}
@customElement({ /* ... */ })
export class MyComponent {
message = 'Hello';
user: User = {
name: 'John Doe',
activate: () => {
console.log('User activated');
this.user.status = 'Active';
},
status: 'Inactive'
};
// Ensure this is actually a function
calculateValue = () => {
return 10 * 5;
};
// Example of incorrect setup causing the error:
// calculateValue = 50; // Assigning a number instead of a function
// Another example: Trying to call 'status' which is a string
// <button click.trigger="user.status()">Show Status</button> <-- This would cause AUR0111
}
Debugging Tips
Use browser developer tools to set breakpoints in the relevant view model code or inspect the scope during rendering.
Log the
typeofthe variable/property right before the call is expected to happen.Simplify the binding expression to isolate the function call.
Check the network tab or component lifecycle methods if the function is expected to be loaded or defined asynchronously.
Last updated
Was this helpful?