我在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',
]
]
]);
现在我已经定制了搜索模型以支持按多个status_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;
}
}
现在我在网格外放了一个adidtional选择框。除了提交按钮外,这有点难看。
在我的搜索视图文件中:
<?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>
我将所选状态存储在js事物的数组中。
echo "var stSelect = ".\yii\helpers\Json::encode($searchModel->sids).";\n"
我想让以下按钮组工作。
<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>
所以我用Jquery写了一些js:
$('.status-button').on('click', function(){
stSelect = toggle(Number($(this).attr("data-key")),stSelect);
$('.status').val(stSelect);
})
var toggle = function(value,array){
if(array.indexOf(value) > -1) {
array.splice(array.indexOf(value),1)
}else{
array.push(value)
}
return array
}
但现在我有以下问题要处理:
每当我提交表格时,get params发送给控制器只需添加到最后一个参数。
例如,在第一次提交中,我选择状态0。
stSelect = {&#34; 0&#34;}
在第2次提交中,我选择状态0和1。
stSelect = {&#34; 0&#34;&#34; 0&#34;&#34; 1&#34;}
但原始过滤器工作正常。
我需要单击“提交”以刷新网格。单击按钮组按钮时如何让网格更新?