我在 Yii 中有一个视图,即“Patients”视图,它有许多 CGridView 和其他在加载初始视图后加载的 ajax 元素。有些是在已经加载 ajax 的 div 中加载的 ajax,这意味着它们嵌套了 2 层。
在这些 ajax 加载的 CGridViews 中,我有下拉菜单,让用户可以设置每个网格中每页的结果数。这可以正常工作,直到用户使用 ajax 在页面上加载另一个元素。在 ajax 加载另一个网格(或其他任何东西)之后,它会破坏每个页面 ajax 函数的所有其他结果,除了刚刚加载的那个。
使用 ajax 加载任何其他内容后,其他 CGridViews 将在使用我的每页结果下拉列表时抛出此 javascript 错误:
类型错误:设置未定义
内置的 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,
));
?>
想法?