Javascript 如何使用搜索模型自定义GridView的过滤器?

Javascript 如何使用搜索模型自定义GridView的过滤器?,javascript,jquery,forms,gridview,yii2,Javascript,Jquery,Forms,Gridview,Yii2,我正在yii2中使用gridview小部件 在我的搜索视图文件中: $gridview=GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ [ 'attribute'=>'id', 'width'=>'10%' ],

我正在yii2中使用gridview小部件

在我的搜索视图文件中:

$gridview=GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        [
            'attribute'=>'id',
            'width'=>'10%'
        ],
        [
            'attribute'=>'status_id',
            'value'=>function ($data) {
                return $data->statusOption[$data->status_id];
            },
           'filterType'=>GridView::FILTER_SELECT2,
           'filter'=> Problem::getStatusOption(),
        ],
        [
            'attribute'=>'content',
        ]
    ]
]);
<?php $form = ActiveForm::begin([
        'method' => 'get',
]);?>

<div class="form-group">
    <select class="status" name="ItemSearch[sids][]" multiple="true">
          <option value="0">status 0 </option>
          <option value="1">status 1 </option>
     </select>
    <button class="btn btn-success" type="submit">submit</button>
 </div>
现在,我已经定制了搜索模型,以支持按多个状态id过滤项目,如下所示

在我的ItemSearch模型文件中:

class ItemSearch extends Item
{
    public $sids=[];

    public function rules()
    {
        return [
            [['status_id'], 'integer'],
            [['sids'], 'safe'],
        ];
    }

    public function query($params)
    {
        $this->load($params);

        $query = Item::find();

        $query->andFilterWhere([
            'status_id' => $this->status_id,
        ]);

        if(!empty($this->sids))
        {
            $query->andWhere(['in','status_id',  $this->sids]);
        }
    }

    public function search($params)
    {
        $query=  $this->query($params);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10,
            ],
        ]);

        return $dataProvider;
    }
}
现在我在网格外放置了一个辅助选择框。这有点难看,旁边有一个提交按钮

在我的搜索视图文件中:

$gridview=GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        [
            'attribute'=>'id',
            'width'=>'10%'
        ],
        [
            'attribute'=>'status_id',
            'value'=>function ($data) {
                return $data->statusOption[$data->status_id];
            },
           'filterType'=>GridView::FILTER_SELECT2,
           'filter'=> Problem::getStatusOption(),
        ],
        [
            'attribute'=>'content',
        ]
    ]
]);
<?php $form = ActiveForm::begin([
        'method' => 'get',
]);?>

<div class="form-group">
    <select class="status" name="ItemSearch[sids][]" multiple="true">
          <option value="0">status 0 </option>
          <option value="1">status 1 </option>
     </select>
    <button class="btn btn-success" type="submit">submit</button>
 </div>
我想让下面的按钮组工作

<div class="btn-group" data-toggle="buttons">
<?php foreach(Problem::getStatusOption() as $key=>$val):?>
    <label class="status-button btn btn-default <?= in_array($key, $searchModel->sids)?"active":''?>" data-key="<?=$key?>"><input type="checkbox"><?= $val?></label>
<?php endforeach;?>
</div>
但现在我要处理以下问题:

  • 每次我提交表单时,get参数发送到控制器只是简单地添加到最后一个参数

    例如,在第一次提交中,我选择状态0

    stSelect={“0”}

    在2rd提交中,我选择状态0和1

    stSelect={“0”、“0”、“1”}

    但是原来的过滤器工作得很好

  • 我需要单击“提交”刷新网格。如何让网格在单击按钮组按钮时更新