Javascript Yii2:更改网格视图';单击按钮上的DataProvider
我的Gridview有3个独立的数据提供程序,一个有保存的数据,一个有未保存的数据,还有一个两者都有 这就是我想要实现的目标: 如果单击“保存”,则数据提供程序将更改为包含已保存数据的数据提供程序 我试着这样做:Javascript Yii2:更改网格视图';单击按钮上的DataProvider,javascript,php,gridview,yii2,pjax,Javascript,Php,Gridview,Yii2,Pjax,我的Gridview有3个独立的数据提供程序,一个有保存的数据,一个有未保存的数据,还有一个两者都有 这就是我想要实现的目标: 如果单击“保存”,则数据提供程序将更改为包含已保存数据的数据提供程序 我试着这样做: <?php if($i == 1){ $dataProvider = $dataProviderSaved; } elseif($i == 2) { $dataProvider = $dataProviderNotsaved; } else { $d
<?php
if($i == 1){
$dataProvider = $dataProviderSaved;
} elseif($i == 2) {
$dataProvider = $dataProviderNotsaved;
} else {
$dataProvider = $dataProviderBoth;
};
\yii\widgets\Pjax::begin(['id' => 'gridview', 'timeout' => false,
'enablePushState' => false, 'clientOptions' => ['method' => 'POST']]) ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
//regular gridview..
\yii\widgets\Pjax::end(); ?>
所以,我刚刚读到,在JS中更改PHP变量是“不可能的”
- 我将如何做到这一点李>
- 有更好的办法吗李>
- 我需要三个吗 数据提供者?(这意味着控制器内部有3个find())
return $this->render('viewYourView', [
'/modelContribuente' =>$modelContribuente,
'dataProviderOne' => $providerOne,
'dataProviderTwo' => $providerTwo,
'dataProviderThree' => $providerThree,
]);(
在一个视图中,您可以创建三个gridview,每个人都使用适当的数据提供程序,然后使用按钮控制的JQuery函数Visalizare或hide gridviewn,如果我理解正确,您不需要三个数据提供程序。您应该使用GridView的
FilterSelector
选项将该外部元素视为GridView过滤器的一部分。
比如说
echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'filterSelector' => "input[name='ModelSearch[_selection]'],",
...
然后,在过滤器模型中,根据该值进行过滤
switch($this->_selection) {
case 'Saved':
$query->andFilterWhere([...]);
break;
case 'Unsaved':
$query->andFilterWhere([...]);
break;
case 'Both':
$query->andFilterWhere([...]);
break;
不要忘记将
\u selection
属性添加到模型类和规则()中,作为搜索模型类中的“安全”属性 首先,如何冷是一个记录。Y管理YII2中的100000条记录,性能是主要问题。显然,10.000.000记录a是一个问题。在这种情况下,第一种解决方案是唯一的。否则改变项目或老板我喜欢‘改变项目或老板’的部分哈哈,因为我想改变我的老板。他决定在这个项目中使用Yii2。。但不管怎样。:)让我来测试一下,我从来没有听说过这个过滤器推选者是最诚实的,非常好,谢谢!:)
switch($this->_selection) {
case 'Saved':
$query->andFilterWhere([...]);
break;
case 'Unsaved':
$query->andFilterWhere([...]);
break;
case 'Both':
$query->andFilterWhere([...]);
break;