Yii2:通过renderAjax加载(嵌套)Gridview时注册javascript
我正在使用Yii2,并试图使用detailUrl选项从主GridView中的ExpandRowColumn(kartik\grid\ExpandRowColumn)中加载GridView(kartik\grid\GridView) 使用“详细信息”选项时,一切正常,该选项在页面加载时加载所有子网格,从而破坏页面加载时间。使用detailUrl选项,子网格可以正确加载,但是子网格上的分页和排序会出现故障,因为在正常页面加载时使用Gridview注册的javascript似乎没有初始化 我的代码: 可扩展行列Yii2:通过renderAjax加载(嵌套)Gridview时注册javascript,yii2,pjax,Yii2,Pjax,我正在使用Yii2,并试图使用detailUrl选项从主GridView中的ExpandRowColumn(kartik\grid\ExpandRowColumn)中加载GridView(kartik\grid\GridView) 使用“详细信息”选项时,一切正常,该选项在页面加载时加载所有子网格,从而破坏页面加载时间。使用detailUrl选项,子网格可以正确加载,但是子网格上的分页和排序会出现故障,因为在正常页面加载时使用Gridview注册的javascript似乎没有初始化 我的代码:
$this->columns[] = [
'class' => 'kartik\grid\ExpandRowColumn',
'expandOneOnly' => true,
'width' => '50px',
'visible' => true,
'order' => DynaGrid::ORDER_FIX_LEFT,
'value' => function ($model, $key, $index, $column) {
return GridView::ROW_COLLAPSED;
},
'detailUrl' => Yii::$app->urlManager->createUrl(['/' . Yii::$app->controller->id . '/sector-details', 'filter' => $this->getSubgridFilter()]),
/*
//Proper functioning code using detail option
'detail' => function ($model, $key, $index, $column) {
$searchModel = new \app\models\search\Subject;
$searchModel->bySector = $key;
$dataProvider = $searchModel->search($this->getSubGridFilter());
return Yii::$app->controller->renderPartial('/linkage/_subgrid', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'gridId' => $key,
]);
},
*
*/
];
public function actionSectorDetails(array $filter = [])
{
if (isset($_POST['expandRowKey'])) {
$sectorId = $_POST['expandRowKey'];
$searchModel = $this->_initSearch();
$searchModel->bySector = $sectorId;
$dataProvider = $searchModel->search($filter);
return $this->renderAjax('/linkage/_subgrid', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'gridId' => $sectorId,
]);
} else {
return '<div class="alert alert-danger">No data found</div>';
}
}
控制器动作
$this->columns[] = [
'class' => 'kartik\grid\ExpandRowColumn',
'expandOneOnly' => true,
'width' => '50px',
'visible' => true,
'order' => DynaGrid::ORDER_FIX_LEFT,
'value' => function ($model, $key, $index, $column) {
return GridView::ROW_COLLAPSED;
},
'detailUrl' => Yii::$app->urlManager->createUrl(['/' . Yii::$app->controller->id . '/sector-details', 'filter' => $this->getSubgridFilter()]),
/*
//Proper functioning code using detail option
'detail' => function ($model, $key, $index, $column) {
$searchModel = new \app\models\search\Subject;
$searchModel->bySector = $key;
$dataProvider = $searchModel->search($this->getSubGridFilter());
return Yii::$app->controller->renderPartial('/linkage/_subgrid', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'gridId' => $key,
]);
},
*
*/
];
public function actionSectorDetails(array $filter = [])
{
if (isset($_POST['expandRowKey'])) {
$sectorId = $_POST['expandRowKey'];
$searchModel = $this->_initSearch();
$searchModel->bySector = $sectorId;
$dataProvider = $searchModel->search($filter);
return $this->renderAjax('/linkage/_subgrid', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'gridId' => $sectorId,
]);
} else {
return '<div class="alert alert-danger">No data found</div>';
}
}
公共函数ActionSector详细信息(数组$filter=[])
{
如果(isset($_POST['expandRowKey'])){
$sectorId=$_POST['expandRowKey'];
$searchModel=$this->_initSearch();
$searchModel->bySector=$sectorId;
$dataProvider=$searchModel->search($filter);
返回$this->renderAjax('/linkage/_subgrid'[
“searchModel”=>$searchModel,
“dataProvider”=>$dataProvider,
“gridId”=>$sectorId,
]);
}否则{
返回“未找到数据”;
}
}
Gridview
//ID examples: actor-subgrid-x
$gridId = Yii::$app->controller->id . '-subgrid-' . $gridId;
$glyph = app\helpers\IconHelper::getIcon($caller);
$gridConfig = [
'simple' => true,
'id' => $gridId . '-inner',
'title' => $title,
'model' => $searchModel,
'provider' => $dataProvider,
'pagerOptions' => ['linkOptions' => ['class' => 'item-link']]
];
?>
<div class="row">
<div class="col⁻xs-12">
<?php
Pjax::begin(['id' => $gridId, 'enablePushState' => false]);
DynaGrid::widget([
'columns' => $this->columns,
'storage' => DynaGrid::TYPE_COOKIE,
'theme' => $this->theme,
'userSpecific' => false,
'showPersonalize' => false,
'showFilter' => false,
'showSort' => false,
'allowThemeSetting' => false,
'gridOptions' => $this->gridOptions,
'options' => ['id' => $gridId], // a unique identifier is important
]);
Pjax::end()
?>
</div>
</div>
//ID示例:actor-subgrid-x
$gridId=Yii::$app->controller->id-子网格-'$gridId;
$glyph=app\helpers\IconHelper::getIcon($caller);
$gridConfig=[
“简单”=>正确,
'id'=>$gridId'-内部',
“title”=>$title,
“模型”=>$searchModel,
“提供者”=>$dataProvider,
'pagerOptions'=>['linkOptions'=>['class'=>'项目链接']]
];
?>
问题是,每当我单击分页或排序链接时,它都会重定向到detailUrl调用的链接,即扇区详细信息,而不是主控制器操作
处理PJAX以捕获子网格分页和排序的javascript似乎没有加载
如何使用renderAjax完全加载Gridview?
请帮忙
我怎样才能解决这个问题