如何重新生成具有活动形式的模态?
How to regenerate a modal with an active form?
我 运行 解决了这个问题,当我创建一个带有活动表单的模态时,我关闭了模态而不提交表单,当我尝试重新创建它时它不会被重置。
基本上我想通过更改按钮发送到控制器的参数来加载不同的模型,同时使用相同的操作。但是看起来该操作只在第一次执行。
我为按钮使用以下代码
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Create <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><?php echo Html::a('From Library', ['/library/physical/create', 'params' => ['type_id' => PhysicalTypes::ControlModule]]);?></li>
<li class="divider"></li>
<li><?php echo Html::a('Area', ['create-modal','params' => ['type_id' => PhysicalTypes::Area,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Process Cell', ['create-modal','params' => ['type_id' => PhysicalTypes::ProcessCell,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Unit', ['create-modal','params' => ['type_id' => PhysicalTypes::Unit,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Equipment', ['create-modal','params' => ['type_id' => PhysicalTypes::Equipment,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Control Module', ['create-modal','params' => ['type_id' => PhysicalTypes::ControlModule,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
</ul>
</div>
然后在我的控制器中使用以下内容
public function actionCreateModal(array $params)
{
...
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->renderAjax('_modal_form', [
'actionTitle' => 'Create new',
'model' => $model,
]);
}
最后我的模态代码被渲染了。
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use yii\helpers\StringHelper;
?>
<?php
$form = ActiveForm::begin(
['enableClientValidation' => true, 'options' => ['id' => 'modal-form']]);
?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"><?= $actionTitle ?> <?= StringHelper::basename(get_class($model)); ?></h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<?php echo Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
<?php ActiveForm::end(); ?>
所以我希望能够关闭 window,单击不同的按钮,然后将新模型加载到模式中。
感谢所有帮助!
这个问题已经有解决方案:reload-content-in-modal-twitter-bootstrap(你的问题更Bootstrap相关)
简而言之,您需要删除“hidden.bs.modal”事件的模态数据。
Bootstrap 3
$this->registerJs(<<<JS
$(document).on('hidden.bs.modal', function (e) {
$(e.target).removeData('bs.modal');
});
JS
);
我 运行 解决了这个问题,当我创建一个带有活动表单的模态时,我关闭了模态而不提交表单,当我尝试重新创建它时它不会被重置。
基本上我想通过更改按钮发送到控制器的参数来加载不同的模型,同时使用相同的操作。但是看起来该操作只在第一次执行。
我为按钮使用以下代码
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Create <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><?php echo Html::a('From Library', ['/library/physical/create', 'params' => ['type_id' => PhysicalTypes::ControlModule]]);?></li>
<li class="divider"></li>
<li><?php echo Html::a('Area', ['create-modal','params' => ['type_id' => PhysicalTypes::Area,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Process Cell', ['create-modal','params' => ['type_id' => PhysicalTypes::ProcessCell,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Unit', ['create-modal','params' => ['type_id' => PhysicalTypes::Unit,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Equipment', ['create-modal','params' => ['type_id' => PhysicalTypes::Equipment,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
<li><?php echo Html::a('Control Module', ['create-modal','params' => ['type_id' => PhysicalTypes::ControlModule,]], ['data-toggle'=>'modal', 'data-target'=>'#modalphysicalcomponentcreate']);?></li>
</ul>
</div>
然后在我的控制器中使用以下内容
public function actionCreateModal(array $params)
{
...
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->renderAjax('_modal_form', [
'actionTitle' => 'Create new',
'model' => $model,
]);
}
最后我的模态代码被渲染了。
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use yii\helpers\StringHelper;
?>
<?php
$form = ActiveForm::begin(
['enableClientValidation' => true, 'options' => ['id' => 'modal-form']]);
?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"><?= $actionTitle ?> <?= StringHelper::basename(get_class($model)); ?></h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<?php echo Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
<?php ActiveForm::end(); ?>
所以我希望能够关闭 window,单击不同的按钮,然后将新模型加载到模式中。 感谢所有帮助!
这个问题已经有解决方案:reload-content-in-modal-twitter-bootstrap(你的问题更Bootstrap相关)
简而言之,您需要删除“hidden.bs.modal”事件的模态数据。
Bootstrap 3
$this->registerJs(<<<JS
$(document).on('hidden.bs.modal', function (e) {
$(e.target).removeData('bs.modal');
});
JS
);