#laravel #laravel-livewire #trix
Вопрос:
Я пытаюсь использовать редактор trix в Laravel8 livewire. Я мог бы заставить его работать, но есть один момент, который очень раздражает. Я использую компонент trix livewire, который вставляется в компонент Post. Мне предлагается использовать событие trix-blur для сохранения содержимого редактора. Это отлично работает, и я могу использовать кнопку «Сохранить», чтобы значение компонента редактора trix было сохранено в записи post в базе данных. Раздражает то, что при возникновении события trix-размытия панель инструментов исчезает и больше никогда не появляется, даже если редактор восстановит фокус. Таким образом, пользователь больше не может им пользоваться. Что я могу сделать, чтобы предотвратить такое поведение.
вот компонент trix
<?php
namespace AppHttpLivewire;
use LivewireComponent;
class Trix extends Component
{
public $value;
public $trixId;
const EVENT_VALUE_UPDATED = 'trix_value_updated';
public function mount($value = ''){
$this->value = $value;
$this->trixId = 'trix-' . uniqid();
}
public function render()
{
return view('livewire.trix');
}
public function updatedValue($value){
$this->emit(self::EVENT_VALUE_UPDATED, $this->value);
}
}
и его вид
<div>
<input id="{{ $trixId }}" type="hidden" name="content" value="{{ $value }}">
<trix-editor wire:ignore class="text-white" input="{{ $trixId }}"></trix-editor>
</div>
<script>
var trixEditor = document.getElementById("{{ $trixId }}")
addEventListener("trix-blur", function(event) {
@this.set('value', trixEditor.getAttribute('value'))
})
</script>
и вот соответствующая часть представления поста
<div>
<div class="button-line flex flex-row">
<span class="flex w-full rounded-md shadow-sm sm:ml-3 sm:w-auto">
<button wire:click.prevent="store()" id="submit" type="button" class="button-register">
Enregistrer l'info-lettre
</button>
</span>
<span class="mt-3 flex w-full rounded-md shadow-sm sm:mt-0 sm:w-auto">
<button wire:click="closeModalPopover()" type="button" class="button-cancel">
Abandonner
</button>
</span>
</div>
@livewire('trix',['value'=>$body])
</div>
Ответ №1:
Я наконец-то нашел ответ здесь https://devdojo.com/tnylea/laravel-livewire-trix-editor-component
Ответ находится в конце Бонусной части. Примечание. только входные данные редактора trix должны иметь провод:игнорировать, но также и div, который его окружает
<div wire:ignore>
<input id="{{ $trixId }}" type="hidden" name="content" value="{{ $value }}">
<trix-editor wire:ignore class="text-white" input="{{ $trixId }}"></trix-editor>
</div>