yii2 - 如何为 GridView 使用多个过滤器选择器?
问题描述
我有两个用于 GridView 的小部件过滤器 - 用于在表格中显示最喜欢的项目的复选框和用于每页项目数的下拉列表。
<?= \kartik\checkbox\CheckboxX::widget([
'name' => 'LSearch[favourite]',
'value' => $lotSearch->favourite,
]) ?>
<?= \nterms\pagesize\PageSize::widget() ?>
对于这两个小部件的工作,我需要设置 GridView 的 filterSelector 属性:
'filterSelector' => 'input[name="LSearch[favourite]"]',
'filterSelector' => 'select[name="per-page"]',
但是我需要为每个小部件单独执行此操作,并且过滤仅适用于一个小部件,因为 filterSelector 是字符串属性并且不接受数组。有没有办法解决这个问题?
解决方案
这个问题多年来一直是一个问题,也许它是一个错误。试试这个,但我不确定这是否有效。如果这不起作用,您需要根据需要进行修改。
yii.gridView.js
applyFilter: function () {
var $grid = $(this), event;
var settings = gridData[$grid.attr('id')].settings;
var data = {};
$.each($(settings.filterSelector).serializeArray(), function () {
if (data[this.name] === undefined) {
data[this.name] = this.name.indexOf('[]') === -1 ? this.value : [this.value];
} else if (typeof data[this.name] === 'object') {
data[this.name].push(this.value);
}
});
$.each(yii.getQueryParams(settings.filterUrl), function (name, value) {
if (data[name] === undefined) {
data[name] = value;
}
});
var pos = settings.filterUrl.indexOf('?');
var url = pos < 0 ? settings.filterUrl : settings.filterUrl.substring(0, pos);
$grid.find('form.gridview-filter-form').remove();
var $form = $('<form action="' + url + '" method="get" class="gridview-filter-form" style="display:none" data-pjax></form>').appendTo($grid);
$.each(data, function (name, value) {
if (typeof value === 'object') {
$.each(value, function (id, value_multi) {
$form.append($('<input type="hidden" name="t" value="" />').attr('name', name).val(value_multi));
});
} else {
$form.append($('<input type="hidden" name="t" value="" />').attr('name', name).val(value));
}
});
event = $.Event(gridEvents.beforeFilter);
$grid.trigger(event);
if (event.result === false) {
return;
}
$form.submit();
$grid.trigger(gridEvents.afterFilter);
},
并确保修改您的配置:
'assetManager' => [
'bundles' => [
'yii\grid\GridViewAsset' => [
'sourcePath' => __DIR__ . '/../assets',
],
],
],
推荐阅读
- android - 带有多个片段的 Android 版 Appium
- c# - 如何禁用长路径文件夹上的 ACL 继承?
- jakarta-ee - 使用 /META-INF/resources 时,WEB-INF 去哪里了?
- ruby-on-rails - 如何将对象从 REST POST 输出转换为数组
- c++ - 如何在插入过程中更改插入的值?
- r - 找出每个月末和r中最大值日期之间的天数
- angular - 更改嵌套的可观察值
- javascript - SAPUI5 将图表导出为 xlsx 文件
- mysql - MYSQL 对每个字母使用多个 CASE REGEXP 作为表行,并且还允许对每个所述 REGEXPied 字母进行重复/重复计算
- nginx - nginx post方法不起作用