Livewire 和 Flatpickr - 重新渲染后失败
Livewire and Flatpickr - fails after rerender
这可能是一个基本问题,但我正在努力。本质上,我有一个 livewire 组件,用于更新用户输入的一系列航班信息。每当组件被重新渲染时,flatpickr 功能就会完全停止工作。我认为这是因为初始化该字段上的组件的 javascript 不是 运行。确保使用适当的 javascript 重新呈现以启用功能的最佳做法是什么。
这是我的 blade 片段,它在初始加载时呈现良好,但每当数据发生更改时,页面 re-renders 数组中的所有航班,但 flatpickr 功能不会工作了
<form>
@foreach($flights as $i => $f)
<label
x-data
x-init="flatpickr($refs.input, {
dateFormat: 'Y-m-d H:i',
altInput: true,
altFormat: 'F j, Y h:i K',
enableTime: true,
})">
<div class="form-label">Arrival Time</div>
<div class="relative">
<input type="text"
wire:model="flights.{{ $i }}.ArrivalTime"
wire:key="fl{{ $i }}arrtime"
data-input
x-ref="input"
placeholder="Arrival Time"
value="{{ $f['ArrivalTime']}}"
name="flights[{{ $i }}][ArrivalTime]"
id="ArrivalTime{{$i}}"
/>
</div>
</label>
@endforeach
</form>
livewire 组件基本上是这样的:
class Itinerary extends Component
{
public $itin = null;
public $flights = [];
public function render()
{
return view('livewire.itinerary');
}
}
您需要将输入包装在 <div>
中,如下所示:
<div wire:ignore>
<!-- Your input here -->
</div>
来源:https://laravel-livewire.com/docs/2.x/alpine-js#ignoring-dom-changes
这可能是一个基本问题,但我正在努力。本质上,我有一个 livewire 组件,用于更新用户输入的一系列航班信息。每当组件被重新渲染时,flatpickr 功能就会完全停止工作。我认为这是因为初始化该字段上的组件的 javascript 不是 运行。确保使用适当的 javascript 重新呈现以启用功能的最佳做法是什么。
这是我的 blade 片段,它在初始加载时呈现良好,但每当数据发生更改时,页面 re-renders 数组中的所有航班,但 flatpickr 功能不会工作了
<form>
@foreach($flights as $i => $f)
<label
x-data
x-init="flatpickr($refs.input, {
dateFormat: 'Y-m-d H:i',
altInput: true,
altFormat: 'F j, Y h:i K',
enableTime: true,
})">
<div class="form-label">Arrival Time</div>
<div class="relative">
<input type="text"
wire:model="flights.{{ $i }}.ArrivalTime"
wire:key="fl{{ $i }}arrtime"
data-input
x-ref="input"
placeholder="Arrival Time"
value="{{ $f['ArrivalTime']}}"
name="flights[{{ $i }}][ArrivalTime]"
id="ArrivalTime{{$i}}"
/>
</div>
</label>
@endforeach
</form>
livewire 组件基本上是这样的:
class Itinerary extends Component
{
public $itin = null;
public $flights = [];
public function render()
{
return view('livewire.itinerary');
}
}
您需要将输入包装在 <div>
中,如下所示:
<div wire:ignore>
<!-- Your input here -->
</div>
来源:https://laravel-livewire.com/docs/2.x/alpine-js#ignoring-dom-changes