HelloZeroNet/ZeroNet · error · Error
renderMaquetteFunction was not found
Error message
renderMaquetteFunction was not found
What it means
Projector.unregisterRenderMaquetteFunction removes a render function from its internal registry by scanning for it; if the function was never registered (or already removed), the splice loop completes without finding it and this error is thrown.
Source
Thrown at plugins/UiConfig/media/js/lib/maquette.js:765
merge: function (domNode, renderMaquetteFunction) {
projections.push(exports.dom.merge(domNode, renderMaquetteFunction(), projectionOptions));
renderFunctions.push(renderMaquetteFunction);
},
replace: function (domNode, renderMaquetteFunction) {
var vnode = renderMaquetteFunction();
createDom(vnode, domNode.parentNode, domNode, projectionOptions);
domNode.parentNode.removeChild(domNode);
projections.push(createProjection(vnode, projectionOptions));
renderFunctions.push(renderMaquetteFunction);
},
detach: function (renderMaquetteFunction) {
for (var i = 0; i < renderFunctions.length; i++) {
if (renderFunctions[i] === renderMaquetteFunction) {
renderFunctions.splice(i, 1);
return projections.splice(i, 1)[0];
}
}
throw new Error('renderMaquetteFunction was not found');
}
};
return projector;
};
}));
View on GitHub (pinned to 454c0b2e7e)
Solutions
- Only unregister the exact function reference previously registered (avoid bind/arrow wrappers).
- Track registration state and skip unregister when already removed.
- Wrap unregister in a guard that checks membership before calling.
Example fix
// before
projector.unregisterRenderMaquetteFunction(this.render);
// after
if (this.registered) {
projector.unregisterRenderMaquetteFunction(this.render);
this.registered = false;
} Defensive patterns
Strategy: try-catch
Validate before calling
function isRegistered(projector, fn) {
try {
var renderFns = projector.renderFunctions || [];
return renderFns.indexOf(fn) !== -1;
} catch (e) { return false; }
}
Type guard
function canUnregister(projector, fn) {
return typeof fn === 'function' && (projector.renderFunctions || []).indexOf(fn) !== -1;
} Try / catch
try {
projector.unregisterRenderMaquetteFunction(this.render);
} catch (e) {
if (e.message === 'renderMaquetteFunction was not found') { /* already unregistered; ignore */ }
else { throw e; }
} Prevention
- Always pair register/unregister with the exact same function reference.
- Track registered state (boolean) on the component and unregister only once.
- Avoid registering bound or inline-wrapped copies of the render function.
When it happens
Trigger: Calling projector.unregisterRenderMaquetteFunction(fn) with a function that was never passed to projector.registerRenderMaquetteFunction, or unregistering the same function twice.
Common situations: Component teardown code unregistering handlers that were never registered due to an early error/branch, double-destroy of a component, or unregistering a wrapped/bound copy instead of the exact registered reference.
Related errors
- renderMaquetteFunction was not found
- Provide a transitions object to the projectionOptions to do
- Style values must be strings
- Property "className" is not supported, use "class".
- "class" property may not be updated. Use the "classes" prope
AI-assisted analysis of HelloZeroNet/ZeroNet@454c0b2e7e (2026-09-02).
Data as JSON: /api/errors/5f4769c79a6ab3a2.
Report an issue: GitHub.