From 57fb4930c173a62b49fa288d21ed34706daaeb04 Mon Sep 17 00:00:00 2001 From: Richard Walton Date: Wed, 22 Oct 2025 15:20:36 +0100 Subject: [PATCH 1/2] Option to destroy the model path after getting the value Otherwise oneshot model paths leak memory: ``` this.model.m('.test').set(true) // the model path will attach listeners to the model and so never be cleaned up from memory ``` --- lib/model/synthesize/setter.dot.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/model/synthesize/setter.dot.js b/lib/model/synthesize/setter.dot.js index b955345..5f3e31b 100644 --- a/lib/model/synthesize/setter.dot.js +++ b/lib/model/synthesize/setter.dot.js @@ -8,7 +8,7 @@ /** * Template that synthesizes setter for Model and for ModelPath */ -return function set(value) { +return function set(value, options) { {{# def.initVars:'set' }} {{# def.createTree:'set' }} @@ -46,4 +46,8 @@ return function set(value) { {{ /* post all stored messages */ }} {{# def.postMessages }} } + + if (options && options.destroyAfterUse) { + this.destroy(); + } }; From 7ed0d43b74c5125f8ae57fe0f61091cca08dd2bd Mon Sep 17 00:00:00 2001 From: Richard Walton Date: Wed, 22 Oct 2025 15:21:48 +0100 Subject: [PATCH 2/2] Added destroyAfter use for get --- lib/model/synthesize/getter.dot.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/model/synthesize/getter.dot.js b/lib/model/synthesize/getter.dot.js index 827743d..ed365c3 100644 --- a/lib/model/synthesize/getter.dot.js +++ b/lib/model/synthesize/getter.dot.js @@ -1,12 +1,18 @@ 'use strict'; /* Only use this style of comments, not "//" */ -return function get() { +return function get(options) { var m = {{# def.modelAccessPrefix }}; - return m {{~ it.parsedPath :pathNode }} + var ret = m {{~ it.parsedPath :pathNode }} {{? pathNode.interpolate}} && (m = m[this._args[ {{= pathNode.interpolate }} ]]) {{??}} && (m = m{{= pathNode.property }}) {{?}} {{~}}; + + if (options && options.destroyAfterUse) { + this.destroy(); + } + + return ret; };