有没有一种方法能靠它生活在视图的初始渲染CGridView 不负荷数据,而是使其与初始页面加载后,后续的AJAX请求加载的第一页?的Yii:如何强制CGridview仅通过AJAX加载数据?
这主要是进行性能优化。有是相当缓慢的背后是一个CGridView数据模型,并且我希望能够有一个活泼的方式在页面加载,然后让数据与AJAX请求的几秒钟后加载。
有没有一种方法能靠它生活在视图的初始渲染CGridView 不负荷数据,而是使其与初始页面加载后,后续的AJAX请求加载的第一页?的Yii:如何强制CGridview仅通过AJAX加载数据?
这主要是进行性能优化。有是相当缓慢的背后是一个CGridView数据模型,并且我希望能够有一个活泼的方式在页面加载,然后让数据与AJAX请求的几秒钟后加载。
可以按如下步骤修改操作:
public function actionIndex() {
$dataProvider = new CActiveDataProvider('User'); // The dataprovider your grid uses
if (!$this->isAjaxRequest()) {
$dataProvider->criteria->addCondition('1 = 0'); // You could also use 0, but I think this is more clear
}
[...]
}
然后在JavaScript部分您的看法:
$(function() { // If you are using jQuery this is executed when the page is loaded
$.fn.yiiGridView.update("{id-of-your-grid-view}");
});
布鲁尔峡谷非常接近,并感谢他的建议的答案,它把我放在正确的轨道上。这工作:
// Controller, after creating $dataProvider, before calling $this->render...
if (!Yii::app()->request->isAjaxRequest) {
$dataProvider->criteria->addCondition('1 = 0');
}
// View
<script type="text/javascript">
$(window).load(function() {
$('#id-of-grid').yiiGridView('update');
});
</script>
只写你的代码在控制器这样的:
$model= new Data('search');
$model->unsetAttributes();
if(isset($_GET['Data']))
$model->attributes = $_GET['Data'];
if (!Yii::app()->request->isAjaxRequest)
$data->id=0; //or something that sure model return empty
isAjaxRequest()不是控制器的方法。它是CHttpRequest的一个属性。所以,虽然你可以检查Ajax请求,例如,如果(Yii的应用::() - >请求 - > isAjaxRequest)...然后通过加入条件和更新功能这个建议的方案进行,这并未”实际上工作。电网根本不加载。一旦我弄清楚,我会回来发布一个工作解决方案。 – 2013-09-07 17:09:20