alpine js,x-model 在切换选项卡时绑定到错误的值

alpine js, x-model binds to wrong value when switching tabs

运行 关于 alpine js 的问题。

首先,我有一个 master 组件,允许用户在两​​个选项卡之间切换

@props(['pages', 'blogs'])

<div x-data="init()" class="overview row mb30">
    <div class="pageContent__content__languages disFlex mb20 bBottom">
                    <span
                        @click.prevent='tab = "pages"'
                        :class='{ "active": tab === "pages" }'
                        class="pageContent__content__languages__item disFlex aiCenter pt10 pb10 pr10 pl10 mr10 pointer">
                     Pagina's
                    </span>
        <span
            @click.prevent='tab = "blogs"'
            :class='{ "active": tab === "blogs" }'
            class="pageContent__content__languages__item disFlex aiCenter pt10 pb10 pr10 pl10 bRadius mr10 pointer">
                         Blogs
                    </span>
    </div>

    <div x-show="tab === 'pages'">
        <x-form.edit.navigation.pages :pages="$pages" />
    </div>

    <div x-show="tab === 'blogs'">
        <x-form.edit.navigation.blogs :blogs="$blogs" />
    </div>

    <button type="button" wire:click="navigationAddToMenu" class="btn blue w100 mt10">
        Toevoegen aan menu
    </button>
</div>



@push('scripts')
    @once
        <script type='text/javascript'>
            function init() {
                return {
                    selected: @entangle('selected'),
                    tab: 'pages',
                };
            }
        </script>
    @endonce
@endpush

这些选项卡显示 pagesblogs,具体取决于单击哪个选项卡。

在这些 blade 组件内部只是一个 foreach 循环来显示项目,

@props(['pages'])
<div style="grid-area: unset" class="pageContent__settings bRadius--lrg disFlex fdCol">
    <table class="overview__wrapper">
        <tbody class="bRadius--lrg">
        @foreach($pages as $page)
            <tr class="overview__row bBottom">
                <td class="overview__row__checkbox">
                    <input x-model='selected'  value='{{ $page->id }}' type="checkbox"
                           id="col-row-{{$loop->index}}">
                    <label for="col-row-{{$loop->index}}"></label>
                </td>
                <td class="overview__row__name lh1">
                    {{ $page->page_name }}
                </td>
            </tr>
        @endforeach
        </tbody>
    </table>
</div>

博客 blade 组件几乎相同。

现在用户可以选中复选框以将项目添加到他们的菜单中,这是使用 @entangle 指令和复选框上的 x-model 绑定的。

到目前为止,当用户位于默认选项卡 pages 并且他们 select 从复选框中检索到正确的 ID 页面时,但是当用户将选项卡切换到blogs 显示,并单击复选框从 pages 选项卡中检索值。

例如

1 个页面和 1 个博客,页面的 ID 为 1 博客的 ID 为 2。用户在 pages 选项卡上并单击复选框,正确的值 1 现在已添加到 selected 数组,用户将选项卡切换到 blogs 并单击复选框预期的行为是将 id 2 添加到 selected 数组,但它仍然添加 1.

检查 HTML 和循环确实为它们的每个项目添加了唯一的 ID。

已修复,需要让输入的 ID 更独特,而不是

     <input x-model='selected' value='{{ $blog->id }}' type="checkbox"
                           id="col-row-{{$loop->index}}">
                    <label for="col-row-{{$loop->index}}"></label>

我添加了一个额外的标识符

     <input x-model='selected' value='{{ $blog->id }}' type="checkbox"
                           id="col-row-blogs-{{$loop->index}}">
                    <label for="col-row-blogs-{{$loop->index}}"></label>
页面

pages

这解决了问题