trixlaravel-livewirealpine.jslaravel-7

Is there a proper way to wire up Trix editor with Livewire?


When wiring together Trix editor content with Livewire, I am stumbling into problems. I believe that the issue is that when Livewire receives content from Trix, the content is swapped out and Trix becomes disabled. Is there a better way?

What I have done, that works, is as follows. At the moment, the page is the redirected to itself in order to reboot Trix (defeating the whole point of Livewire, but it's being used for other things too).

<div>
  <input
      id="newCommentTextTrixContent"
      type="hidden"
      wire:model="newCommentText"
  >

  <trix-editor
      id="newCommentTextTrixEditor"
      input="newCommentTextTrixContent"
  ></trix-editor>


  <button wire:click="addComment(document.getElementById('newCommentTextTrixEditor').innerHTML)">Add Comment</button>
</div>

I have tried

I'm sure something like the latter is better, but with Trix somehow being rebooted each time. It all seems a bit messy - so the question is, what's the right way to do this?


Solution

  • I got it working. With up to date Livewire and Alpine installations, the code is roughly as follows.

        <div wire:ignore>
            <trix-editor
                class="formatted-content"
                x-data
                x-on:trix-change="$dispatch('input', event.target.value)"
                x-ref="trix"
                wire:model.debounce.60s="newCommentText"
                wire:key="uniqueKey"
            ></trix-editor>
        </div>
    

    Why does this work?

    That's it. I use this above to repetitively submit comments onto the end of a comment stream, and everything seems to work fine. Good luck!

    Note, I also have CKEditor working similarly, as described here.