如何在 Yii2 上的 gridview 中创建一个选择(下拉列表)

问题描述 投票:0回答:1

我正在尝试创建一个选择,以便稍后在ajax中发送选定的值,我搜索了如何执行此操作,但我看到大多数情况下选择必须用数据库中的数据填充,但情况并非如此。我只需要用户选择两个值,我至少在视觉上成功地创建了营地

Field inside the gridview

我设法用这段代码做到了:

                [
                    'attribute' => 'warehouse',
                    'label' => Yii::t('wms', 'Almacen'),
                    'vAlign' => 'middle',
                    'value' => function ($model) {
                        return Html::dropDownList('w.id', 'name', 
                        ['1' => 'Sym 1', 
                         '2' => 'Sym 2',
                        ], 
                        ['id' => 'Almacen', 'class' => 'form-control'
                    ]);
                    },
                    'format' => 'raw'
                ], 

但是在ajax上选择它时,它不接受该值:

                    $(keys).each(function(i, key) {
                        var order = parseInt($('tr[data-key=' + key + ']').find('.warehouse').html());
                        units.push({
                            key: key,
                            order: warehouse,
                            value: $('#pa-'+key).val()
                        })
                    }); 

这是一个快速修复,但就我看来,如果我从数据库调用它,则只能从 gridview 发送数据,但我可能是错的,对 yii2 有点陌生,这里有很多方法可以做事。这不是一个搜索框,而是一个项目列表,人们可以在其中进行选择并将数据发回

php yii2
1个回答
0
投票

首先,确保您的下拉列表在 GridView 中正确生成。您的代码对于这部分来说看起来不错,但如果 GridView 中有多行,您可能希望确保每个下拉列表都有唯一的 id 属性,对吗?

尝试将下拉列表的 id 修改为每行唯一:

'value' => function ($model) {
    return Html::dropDownList('w.id', 'name', 
        ['1' => 'Sym 1', '2' => 'Sym 2'], 
        ['id' => 'Almacen-' . $model->id, 'class' => 'form-control']
    );
},

您也可以稍微更改一下 JavaScript,也许您需要调整选择器以正确定位下拉列表。

$(keys).each(function(i, key) {
    var warehouse = $('#Almacen-' + key).val();
    units.push({
        key: key,
        warehouse: warehouse,
        value: $('#pa-' + key).val() // Ensure this is correct
    });
});

您应该尝试确保您的 Ajax 请求正确设置以将单位数组发送到您的服务器。验证数据结构是否匹配。

同样在服务器端,尝试查看是否正确处理传入的数据。这将取决于您的 Yii2 控制器的操作方式。

并使用 JavaScript 中的控制台日志和 Yii2 应用程序中的调试日志来跟踪可能发生问题的位置。

© www.soinside.com 2019 - 2024. All rights reserved.