From 25b205c01bf43e6d404c6422a353e44124785fd3 Mon Sep 17 00:00:00 2001 From: Jelle De Loecker Date: Fri, 14 Jun 2024 15:56:00 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20another=20reactive=20re-re?= =?UTF-8?q?ndering=20scope=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/renderer.js | 2 +- lib/element/custom_element.js | 3 +++ test/10-expressions.js | 37 +++++++++++++++++++++++++++++++---- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/lib/core/renderer.js b/lib/core/renderer.js index d97e185..b1a6402 100644 --- a/lib/core/renderer.js +++ b/lib/core/renderer.js @@ -738,7 +738,7 @@ Renderer.setProperty(function current_element() { if (this.current_variables.has('$ancestor_element')) { return this.current_variables.get('$ancestor_element'); } - + return; } diff --git a/lib/element/custom_element.js b/lib/element/custom_element.js index 6dcbfb0..c17d133 100644 --- a/lib/element/custom_element.js +++ b/lib/element/custom_element.js @@ -1258,7 +1258,10 @@ function renderContentsWithTemplate(element, template, variables, slot_data, ple variables.setFromTemplate('child_nodes', slot_data.child_nodes); } + element.hawkejs_renderer = renderer; + renderer[Hawkejs.ANCESTOR_ELEMENT] = element; variables.setFromTemplate('$ancestor_element', element); + variables.hawkejs_renderer = renderer; Hawkejs.series(next => { renderer.renderTemplate(template, variables, String(render_counter++)).done(next); diff --git a/test/10-expressions.js b/test/10-expressions.js index 3605459..3855fce 100644 --- a/test/10-expressions.js +++ b/test/10-expressions.js @@ -1282,7 +1282,7 @@ This should be a converted variable: state:message={% my_name{:} %} > {{ state:message{:} }}-{{ attr:name }}-{{ prop:id }} - {{ state:message{:} }}-{{ attr:name }}-{{ prop:id }} + {{ state:message{:} }}-{{ attr:name }}-{{ prop:id }}
{{ var:foo{:} }}
`, @@ -1290,7 +1290,7 @@ This should be a converted variable: ` init-t1-l - init-- + init-A-
bar
`, @@ -1302,11 +1302,40 @@ This should be a converted variable: ` second-t1-l - second-- + second-A-
baz
`, - ] + ], + // Test to see if `updateElementProperty()` has the correct renderer + [ + // Prepare the state & variables + (vars) => { + state = {}; + state.name_one = vars.set('name_one', Optional('init1')); + state.name_two = vars.set('name_two', Optional('init2')); + }, + // Initial template + ` + + + `, + // Expected result + ` + + + `, + (vars) => { + state.name_one.value = 'change1'; + state.name_two.value = 'change2'; + }, + // New expected result + ` + + + `, + + ], ]; createReactiveTests(tests);