我在索引页中有多个网格视图,每个网格视图(说:待定记录网格视图,完成记录网格视图,取消记录网格视图,…)具有相同的列(例如:姓名,号码,位置,…)每个网格视图都有自己的搜索/过滤行,每个网格视图都在为搜索进行Pjax调用。
直到它使Pjax调用一切都很好,但在某些情况下(我不知道确切)页面刷新和搜索应用于所有网格视图(这是问题)。
请告诉我解决这个问题的方法。
我以前的问题是,每个网格视图也有分页,当我使用点击一个网格视图的分页,它也会影响另一个网格视图的分页,解决方案是,我使用了不同的pageParam:
'pagination' => [
'pageParam' => 'ConfirmedPackage',
],
对于数据提供程序的搜索/过滤是否有类似的解决方案?
在页面重新加载后,它在url中使用相同的类名来搜索网格。
谢谢。
发生这种情况的原因是您对所有搜索模型使用了相同的类。这反过来又导致过滤器字段具有相同的名称,例如ProductSearch[description]
。幸运的是,有一个解决方案。
您应该在模型中定义自己的formName()
方法。默认情况下,它返回类名。对于您来说,它应该为您正在使用的每个模型实例返回不同的名称。这样你就会得到ProductSearch1[description]
, ProductSearch2[description]
等。
我建议你在你的类中定义一个公共变量(例如,formName
),在创建模型实例时初始化它,并在formName()
方法中返回它。
下面是一个具体的例子。
class ProductSearch extends ProductSearch
{
public $formName = null;
public function formName()
{
if (null == $this->formName) {
return parent::formName();
} else {
return $this->formName;
}
}
//other class attributes and methods
}
下面是你如何使用这个模型:
$model1 = new ProductSearch();
//will generate default names like ProductSearch[somefield]
$model2 = new ProductSearch(['formName' => 'MyProductForm']);
//will generate names like MyProductForm[somefield]
$model3 = new ProductSearch();
$model3->formName = 'MyProductForm';
//a different way to initialize the model
//will also generate names like MyProductForm[somefield]
正如我在我的问题中提到的,问题是由于相同的类名(在url中),我在搜索模型中使用相同的类用于所有搜索功能,当我尝试使用不同的类时,它工作得很好:)。
谢谢。