我在livewire 2中集成了tiptap编辑器,它一直工作得很好,直到我将我的项目升级到livewire 3。
下面是Livewire Article组件的代码
public function insertMedia(Media $media): void
{
$this->dispatch('tiptap-insert-media', [
'type' => $media->mime_type,
'url' => '/storage/' . $media->getPathRelativeToRoot(),
'alt' => $media->name,
]);
$this->showMediaModal = false;
}
在tiptap.js中
insertMedia(type, url, alt) {
if (type.startsWith('image')) {
editor.chain().focus().setImage({src: url, alt: alt}).run();
}
if (type.startsWith('video')) {
editor.chain().focus().insertContent(`<video src="${url}"></video>`).run();
}
},
在tiptap.blade.php
<div
wire:ignore
x-data="setupEditor(@entangle($attributes->wire('model')){{ $attributes->wire('model')->hasModifier('defer') ? '': '.defer' }})"
x-init="() => init($refs.element)"
x-on:tiptap-insert-media.window="insertMedia($event.detail.type, $event.detail.url, $event.detail.alt)"
{{ $attributes->whereDoesntStartWith('wire:model') }}
>
我在这行出错了-
x-on:tiptap-insert-media.window="insertMedia($event.detail.type, $event.detail.url, $event.detail.alt)"
误差
Alpine表达式错误:e未定义
表达式:“insertMedia($event.detail.type,$event.detail.url,$event.detail.alt)”
它被渲染成这样
<div wire:ignore="" x-data="setupEditor(window.Livewire.find('8lIbGsfwbm2bmzfgHfIq').entangle('article.content').defer)" x-init="() => init($refs.element)" x-on:tiptap-insert-media.window="insertMedia($event.detail.type, $event.detail.url, $event.detail.alt)" wire:target="save" wire:loading.delay.class="opacity-50" style="height: 500px;overflow: auto;">
它在livewire v2中工作得很好,但在v3中不工作。我已经尝试了所有的选项,甚至测试了函数是否传递类型,URL和ALT。
1条答案
按热度按时间moiiocjp1#
问题是这样的。在v2的前面,我们使用type => 'test'来传递
正确的方式。在v3中,我们可以传递类型:$media->mime_type,