对一个网格视图的搜索会影响到其他网格视图



我在索引页中有多个网格视图,每个网格视图(说:待定记录网格视图,完成记录网格视图,取消记录网格视图,…)具有相同的列(例如:姓名,号码,位置,…)每个网格视图都有自己的搜索/过滤行,每个网格视图都在为搜索进行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中),我在搜索模型中使用相同的类用于所有搜索功能,当我尝试使用不同的类时,它工作得很好:)。

谢谢。

最新更新