在 Livewire 中使用 Select2
我之前的帖子里写了如何使用 choices.js,不过在那之前我还做过一个东西……\ 那就是 Select2。 它运行得很好,没有任何问题。不过,defer 功能无法使用。\ 也就是说,每次选择 select 时,都必须通过 Livewire call 保存数据。 这是因为 entangle 在 array 中无法正常
我之前的帖子里写了如何使用 choices.js,不过在那之前我还做过一个东西……
那就是 Select2。

我之前的帖子里写了如何使用 choices.js,不过在那之前我还做过一个东西……\ 那就是 Select2。 它运行得很好,没有任何问题。不过,defer 功能无法使用。\ 也就是说,每次选择 select 时,都必须通过 Livewire call 保存数据。 这是因为 entangle 在 array 中无法正常
我之前的帖子里写了如何使用 choices.js,不过在那之前我还做过一个东西……
那就是 Select2。

<div
wire:ignore>
<select
{{-- x-data="{ amount: $wire.entangle('stones.{{ $key }}.stone_id').defer, anElement: null }"--}}
x-data
x-init="$nextTick(() => {
$($el).select2({ width: '100%' });
$($el).val(@this.stones[{{$key}}]['stone_id']).trigger('change');
$($el).on('select2:select', function (e) {
@this.call('setStones', {{$key}}, e.params.data.id);
});
});"
class="block w-full bg-white border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-gray-900 focus:border-gray-900 text-xs"
x-ref="select">
<option value=''>선택</option>
@foreach($stone_list as $value2)
<option value="{{$value2['id']}}">{{$value2['name']}}</option>
@endforeach
</select>
</div>它运行得很好,没有任何问题。不过,defer 功能无法使用。
也就是说,每次选择 select 时,都必须通过 Livewire call 保存数据。
这是因为 entangle 在 array 中无法正常工作,在需要灵活性的地方引发了错误。
所以我提出了这个问题。
最终,这个问题得到了改进。(当然,以撰写这篇文章的时间为准,更新还没有应用,我也没能测试)
此外,entangle 的另一个问题也得到了解决。
joshhanley 这位用户真的很厉害……他找到了我一直没能解决的问题所在的核心代码,进行了修改,提交了 pull 请求,甚至还通过了测试。(令我惊讶的是,他还编写了 test 文件并一并提交,在 GitHub 上对所有代码进行测试,确认没有问题并通过测试。这就是一边编写 test 文件一边编码的方法吗?对于重要的核心项目或大型项目来说,这似乎是必不可少的……不过,逐个编写 test 文件再进行开发也很耗时……我暂时还是 pass。)
我正期待 Livewire 尽快更新到修复了 entangle 这些问题的版本。