Elements are Removed by LiveView

Hi, I want to ask is it possible to turn off some elements from being updated by LiveView? I have a use case like the following:

I use Trix Editor (https://trix-editor.org/) in my project and it’s working perfectly with “Dead” view, / the regular controller view. But when I try to use LiveView for pages that incorporate this editor, LiveView seems to remove the elements generated by the library.

To give you some context, Trix editor requires you only to insert one custom HTML tag () and the library generates the actual editor after the page is rendered. When we interact with the editor, Trix will automatically send the generated HTML strings to a target input element in the form, which actually is hidden from the UI. After we’ve done using the editor and try to save, the actual data sent is the one inside the target input element, not inside the Trix editor itself.

When I try to use it inside a LiveView, it somehow removes the editor from the DOM after updated. The flow is something like this:

  1. HTML loaded, containing tag
  2. Trix editor JS executed, generating the editor
  3. The socket fills the LiveView component containing the form
  4. The form target input field is populated from the existing data
  5. Trix editor content is updated (by the tw-way communication between Trix editor and target input field)
  6. Live view detects the update, Trix editor is destroyed.

My question is, is there any way to exclude some part of the html from being updated by the LiveView? The only communication the LiveView needs in this case is from the Trix editor’s target element to the stateful process and vice versa, but no need to try to update and the state of the editor itself.

TLDR: Use phx-update="ignore":

https://hexdocs.pm/phoenix_live_view/dom-patching.html

2 Likes

Thanks! That’s exactly what I need and it solves the problem.

1 Like