【问题标题】:Yii CGridView rendered inside CJuiDialog won't be filtered or ordered在 CJuiDialog 中渲染的 Yii CGridView 不会被过滤或排序
【发布时间】:2014-05-13 15:39:59
【问题描述】:

我在 CJuiDialog 中渲染 CGridView,效果很好。

我的问题是,每次我单击列标题对记录进行排序时,页面都会更改(url 是通过 ajax 使用 renderPartial 呈现的视图的 url)并且请求不是 ajax(控制器内部的 Yii::app()->request->isAjaxRequest 是假)。

另外,如果我过滤任何字段,什么都不会发生。

如何让用户对 CGridView 进行排序或过滤?

或者: 是否有另一种方法让用户通过 CGridView 选择外键字段?

【问题讨论】:

    标签: ajax yii cgridview cjuidialog


    【解决方案1】:

    发生此问题的原因可能是 javascript 错误,或者代码上的 click 函数被覆盖(而不是返回 false)。你能显示你的代码吗?

    【讨论】:

    • 没有 javascript 错误,在网上寻找解决方案,我发现即使在标准 CGridView 中单击列标题也会重新加载页面(但用户没有注意到它)。但这是我的问题,我必须阻止该页面加载
    • 我以前从未见过此信息。单击列标题会调用 ajax,并且永远不会重新加载页面。只有当 this 没有返回 false 时才会发生这种情况,并且默认情况下它确实会发生:link
    【解决方案2】:

    我终于找到了解决办法。

    当您调用 renderPartial 时,您必须设置第三个参数 = FALSE 和第四个参数 = TRUE。

    $this->renderPartial('ajax_view',array(
                'model'=>$model,
                'dataProvider'=>$dataProvider,
                ),false,TRUE);
    

    来自官方文档:

    $return boolean 渲染结果是否应该返回而不是显示给最终用户 $processOutput boolean 渲染结果是否应该使用 processOutput 进行后处理。

    还有最重要的调整: 在使用 renderPartial 渲染的视图中,您必须添加:

    Yii::app()->clientscript->scriptMap['jquery.js'] = false;
    

    页面被重新加载只是因为 jquery 被加载了多次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多