Error when setting defaults of an extended model
Hey @bilogic your demo seems to use the proper API for extending components, the one relying on .extend( was dropped a long time ago
Read full answer below ↓Question
GrapesJS version
- I confirm to use the latest version of GrapesJS
What browser are you using?
Version 141.0.7390.123 (Official Build) (64-bit)
Reproducible demo link
https://codesandbox.io/p/sandbox/jovial-elion-js8zgy?file=%2Findex.js%3A1%2C1-15%2C1
Describe the bug
import grapesjs from "grapesjs";
import "grapesjs-blocks-basic";
const editor = grapesjs.init({
container: "#gjs",
fromElement: 1,
storageManager: { type: 0 },
plugins: ["gjs-blocks-basic"],
});
let linkType = editor.DomComponents.getType("link");
let linkTypeExtended = linkType.model.extend({
defaults: linkType.model.prototype.defaults, // offending line
});
The above worked in 0.15.x but not in 0.22.13. Any idea what is the problem?
Code of Conduct
- I agree to follow this project's Code of Conduct
Answers (2)
Hey @bilogic your demo seems to use the proper API for extending components, the one relying on .extend( was dropped a long time ago
Thanks for reporting this, @bilogic.
The issue with Error when setting defaults of an extended model appears to be a race condition or state management timing problem. This typically happens when component lifecycle events and DOM modifications overlap, creating an inconsistent state.
What to try:
- Add a setTimeout wrapper to ensure the DOM has settled:
setTimeout(() => {
// your operation here
}, 0);
-
Check initialization order — make sure components are fully loaded before you interact with them
-
Use the editor's event system — listen to completion events:
editor.on('component:mount', (component) => {
// safe to interact with component here
});
Recommended next steps:
- Test with the latest GrapesJS version if you haven't
- Provide a minimal reproducible example (CodeSandbox) — this helps the team identify the root cause faster
- Include GrapesJS version, browser, and console errors in your report
Related Questions and Answers
Continue research with similar issue discussions.
Issue #5922
Unable to use UI controls for the video component when
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? v125.0.6422.113 (Official Build) (64-bit)...
Issue #6407
Custom traits are not loading inside a custom block
GrapesJS version [x] I confirm to use the latest version of GrapesJS What browser are you using? Version 133.0.6943.98 Reproducible demo li...
Issue #6040
Cannot read properties of undefined (reading 'lastComponent')
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Version 127.0.6533.89 (Official Build) (64...
Issue #3794
RTE Overlapping text In Basic Text Component when Width & Height are 100% of Canvas
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Version 93.0.4577.82 (Official Build) (64-...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins →Premium plugins ship with support, regular updates, and production-ready features — save days of integration work.
Browse premium plugins →Related tutorials
In-depth guides on the same topic.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Tutorial
GJS Market 2.0 - Donations, Tracking, Labels and Better Product Discovery
We’ve rolled out a new set of GrapesJS marketplace updates across GJS Market, focused on improving how creators distribute products
Tutorial
Preset DevFuture 2.0 — New Update Released
Preset continues evolving as a clean, production-ready starting point for building visual editors powered by GrapesJS
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.