【问题标题】:How to regenerate a modal with an active form?如何重新生成具有活动形式的模态?
【发布时间】:2021-07-25 10:34:57
【问题描述】:

我遇到了这个问题,当我创建一个带有活动表单的模式时,我在不提交表单的情况下关闭了该模式,当我尝试重新创建它时它不会被重置。

基本上,我想通过更改按钮发送到控制器的参数来加载不同的模型,同时使用相同的操作。但是看起来该操作只执行了第一次。

我对按钮使用以下代码

<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">&times;</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(); ?>

所以我希望能够关闭窗口,单击不同的按钮,然后将新模型加载到模态中。 感谢所有帮助!

【问题讨论】:

    标签: php yii2 bootstrap-modal


    【解决方案1】:

    这个问题已经有解决方案了:reload-content-in-modal-twitter-bootstrap(你的问题和Bootstrap比较相关)

    简而言之,您需要删除“hidden.bs.modal”事件的模态数据。

    引导程序 3

    $this->registerJs(<<<JS
    $(document).on('hidden.bs.modal', function (e) {
            $(e.target).removeData('bs.modal');
        });
    JS
    );
    

    【讨论】:

    • 感谢工作就像一个魅力!当你通过 e.target 获得目标时,你能解释一下 (e) “返回”什么吗?
    猜你喜欢
    • 2018-06-07
    • 2021-11-16
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多