4

CGridView が存在するビューの最初のレンダリングでデータをロードせ、代わりに、最初のページのロード後に後続の AJAX 要求で最初のページをロードする方法はありますか?

これは主にパフォーマンスの最適化のためです。そのCGridViewの背後にはかなり遅いデータモデルがあり、ページをすばやくロードしてから、数秒後にAJAXリクエストでデータをロードできるようにしたいと考えています。

4

3 に答える 3

4

次のようにアクションを変更できます。

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}");
});
于 2013-03-16T04:51:22.860 に答える
0

Brewer Gorge は非常に近く、彼の提案された回答のおかげで、正しい軌道に乗ることができました。これは機能します:

// 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>
于 2013-09-07T18:07:22.817 に答える
0

次のようにコントローラーにコードを書くだけです:

$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
于 2014-10-09T01:42:34.437 に答える