Yiiには、「患者」ビューというビューがあります。このビューには、最初のビューが読み込まれた後にajaxが読み込まれるCGridViewやその他の要素がいくつかあります。一部は、すでにajaxがロードされたdiv内にajaxがロードされています。つまり、2レベルの深さでネストされています。
これらのajaxがロードされたCGridViewには、ユーザーが各グリッドのページごとの結果の数を設定できるドロップダウンがあります。これは、ユーザーがajaxを使用してページに別の要素をロードするまで正常に機能します。別のグリッド(または他のグリッド)がajaxによってロードされた後、ロードされたばかりのグリッドを除いて、ページごとのajax関数の他のすべての結果が壊れます。
他のものをajaxでロードした後、他のCGridViewは、ページごとの結果のドロップダウンを使用すると、このjavascriptエラーをスローします。
TypeError:設定は未定義です
組み込みのCGridViewページャーは、すべてのグリッドで常に正常に機能するため、ページセレクターごとの結果で更新する正しい$.fn.yiiGridViewを見つける方法が必要です。
cgridviewをインラインでロードするコントローラーアクション:
public function actionInlineSearch()
{
YiiSessions::model()->setFromRequestCookie();
$model=new GeneExpressionCufflinksGene('search');
$model->unsetAttributes(); // clear any default values
// page size drop down changed
if (isset($_GET['gecgPageSize'])) {
Yii::app()->user->setState('gecgPageSize',(int)$_GET['gecgPageSize']);
unset($_GET['gecgPageSize']); // would interfere with pager and repetitive page size change
}
$gecgPageSize=Yii::app()->user->getState('gecgPageSize');
if(isset($_REQUEST['GeneExpressionCufflinksGene']))
$model->attributes=$_REQUEST['GeneExpressionCufflinksGene'];
$this->renderPartial('inlineSearch',array('model'=>$model,'gecgPageSize'=>$gecgPageSize), false, true);
}
CGridViewウィジェットをロードするinlineSearchビュー:
// $columns[]='normal_allele_depth';
// $columns[]='normal_allele_freq';
echo "<div class='results-selector'>";
echo "Results per page: ".
CHtml::dropDownList('gecgPageSize',$gecgPageSize,array(10=>10,20=>20,50=>50,100=>100),array(
'onchange'=>"
$.fn.yiiGridView.update('gecg',{ data:{gecgPageSize: $(this).val() }});
",
));
echo "</div>";
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'gecg',
'filter'=>$model,
'dataProvider'=>$dataProvider,
'columns'=>$columns,
));
?>
考え?