Javascript 如何使用搜索模型自定义GridView的过滤器?
我正在yii2中使用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%' ],
$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”} 但是原来的过滤器工作得很好
- 我需要单击“提交”刷新网格。如何让网格在单击按钮组按钮时更新