我有两个用于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是字符串属性,并且不接受数组。有什么办法可以解决这个问题?
答案 0 :(得分:0)
这个问题已经困扰了好几年了,也许是一个错误。 尝试一下,但是我不确定是否可以正常工作。如果无法正常运行,则需要根据需要进行修改。
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',
],
],
],