Issue #6180💬 AnsweredOpened September 30, 2024by padcom1 reactions

Trait's `setValue()` method not called when value changes

Quick answerby padcom1

Thank you! I verified and it is working as expected!

Read full answer below ↓

Question

GrapesJS version

  • I confirm to use the latest version of GrapesJS

What browser are you using?

Chrome latest

Reproducible demo link

https://codesandbox.io/p/sandbox/withered-rgb-xmw8gk

Describe the bug

How to reproduce the bug?

  1. Open code sandbox
  2. Select "body" (type: 'wrapper') - observe alert about getting value from custom source (trait.getValue() is called)
  3. Try to change the value (trait: custom, the only one there) - observe the "setValue()" is not called as no alert is shown

What is the expected behavior? An alert "Setting global value to " + value is shown

What is the current behavior? Alert not shown, the trait.setValue() method is not called.

If is necessary to execute some code in order to reproduce the bug, paste it here below:

// your code here

Code of Conduct

  • I agree to follow this project's Code of Conduct

Answers (4)

padcomOctober 21, 2024

Thank you! I verified and it is working as expected!

padcomSeptember 30, 2024

From what I can see the Trait.setValue() is not called when the value comes from an input. Instead the setTargetValue() is called which doesn't check if the setValue() method of the trait definition is there. Also, the Trait.setValue() checks for the setValue key in attributes whereas Trait.getValue() gets its custom getter via this.get('getValue') (Trait.ts:303)

padcomSeptember 30, 2024

I tried following this discussion to get it working but as you can see in the sandbox it just doesn't work.

ClaudeCodeMay 17, 2026

Thanks for reporting this, @padcom.

Great question about Trait's setValue() method not called when value changes. The recommended approach with GrapesJS is to use the event-driven API.

Start here:

  1. Check the GrapesJS documentation for your specific module
  2. Look for the on() event listener method
  3. Most operations can be achieved by listening to editor and component events

Common patterns:

// Listen for changes
editor.on('change', () => console.log('something changed'));

// Component lifecycle
editor.on('component:mount', (c) => console.log('component ready', c));
editor.on('component:update', (c) => console.log('component updated', c));

If you're still stuck:

  • Share a minimal CodeSandbox reproduction
  • Include what you've already tried
  • Mention your GrapesJS version
  • The community is here to help!

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Free option

Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.

Browse free plugins →
Premium option

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.

All tutorials →

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.