diff --git a/lib/core/renderer.js b/lib/core/renderer.js
index b1a6402..93c5a07 100644
--- a/lib/core/renderer.js
+++ b/lib/core/renderer.js
@@ -2457,17 +2457,20 @@ Renderer.setMethod(function applyElementOptions(element, options, for_sync_rende
if (needs_async_work && !for_sync_render) {
let renderer = this,
- value = val,
- value_key = key;
+ value = val,
+ value_key = key;
Hawkejs.getRenderTasks(element).addPreTask(function prepareValue() {
- var that = this,
- final_tasks = [],
- pre_tasks = [],
- tasks = [];
+ let that = this,
+ final_tasks = [],
+ pre_tasks = [],
+ tasks = [];
- Hawkejs.recurseLineTasks([value], pre_tasks, tasks, renderer);
+ let sub_renderer = renderer.createSubRenderer();
+ sub_renderer[Hawkejs.ANCESTOR_ELEMENT] = element;
+
+ Hawkejs.recurseLineTasks([value], pre_tasks, tasks, sub_renderer);
final_tasks = final_tasks.concat(pre_tasks).concat(tasks);
diff --git a/lib/element/custom_element.js b/lib/element/custom_element.js
index c17d133..2f70564 100644
--- a/lib/element/custom_element.js
+++ b/lib/element/custom_element.js
@@ -1226,6 +1226,10 @@ function renderContentsWithTemplate(element, template, variables, slot_data, ple
if (element.constructor.use_new_renderer_scope || renderer?.dialog_open) {
renderer = renderer.createSubRenderer();
renderer.scope_id = renderer.getId();
+ } else {
+ // Create a shim so the `ANCESTOR_ELEMENT` symbol
+ // doesn't break things later
+ renderer = Object.create(renderer);
}
if (!pledge) {
diff --git a/test/10-expressions.js b/test/10-expressions.js
index 3855fce..d4201d2 100644
--- a/test/10-expressions.js
+++ b/test/10-expressions.js
@@ -1334,8 +1334,56 @@ This should be a converted variable: