swilson1337/yii2-modal-ajax

Yii2 Bootstrap Modal 的包装器,用于在内部通过 AJAX 使用 ActiveForm

安装次数: 1,610

依赖者: 0

建议者: 0

安全性: 0

星级: 0

关注者: 1

分支: 29

语言:JavaScript

类型:yii2-extension

4.3.5 2018-06-11 15:36 UTC

This package is auto-updated.

Last update: 2024-09-08 18:56:40 UTC


README

Latest Stable Version Total Downloads License

Yii2 Bootstrap Modal 的包装器,用于在内部通过 AJAX 使用 ActiveForm。

安装

安装此扩展的首选方式是通过 composer

运行

$ php composer.phar require --prefer-dist loveorigami/yii2-modal-ajax "@dev"

或者在您的 composer.json 文件的 require 部分添加

"loveorigami/yii2-modal-ajax": "@dev"

用法

控制器

通过添加 AJAX 渲染和保存功能扩展基本逻辑

public function actionCreate()
{
    $model = new Company();

    if ($model->load(Yii::$app->request->post())) {
        if ($model->save()) {             
            return $this->redirect(['view', 'id' => $model->id]);             
        }
    }

    return $this->render('create', [
        'model' => $model,
    ]);
}

public function actionCreate()
{
    $model = new Company();

    if ($model->load(Yii::$app->request->post())) {
        if ($model->save()) {             
            if (Yii::$app->request->isAjax) {
                // JSON response is expected in case of successful save
                Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
                return ['success' => true];
            }
            return $this->redirect(['view', 'id' => $model->id]);             
        }
    }

    if (Yii::$app->request->isAjax) {
        return $this->renderAjax('create', [
            'model' => $model,
        ]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

视图

use lo\widgets\modal\ModalAjax;

echo ModalAjax::widget([
    'id' => 'createCompany',
    'header' => 'Create Company',
    'toggleButton' => [
        'label' => 'New Company',
        'class' => 'btn btn-primary pull-right'
    ],
    'url' => Url::to(['/partner/default/create']), // Ajax view with form to load
    'ajaxSubmit' => true, // Submit the contained form as ajax, true by default
    // ... any other yii2 bootstrap modal option you need
]);

网格中的用法

索引视图 - 创建(单模态模式)

use lo\widgets\modal\ModalAjax;

echo ModalAjax::widget([
    'id' => 'createCompany',
    'header' => 'Create Company',
    'toggleButton' => [
        'label' => 'New Company',
        'class' => 'btn btn-primary pull-right'
    ],
    'url' => Url::to(['/partner/default/create']), // Ajax view with form to load
    'ajaxSubmit' => true, // Submit the contained form as ajax, true by default

    'options' => ['class' => 'header-primary'],
    'autoClose' => true,
    'pjaxContainer' => '#grid-company-pjax',

]);

索引视图 - 更新(多模态模式)

带 data-scenario 的网格示例

<a class="btn" href="/site/update?id=10" title="Edit ID-10" data-scenario="hello">Hello</a>
<a class="btn" href="/site/update?id=20" title="Edit ID-20" data-scenario="goodbye">Goodbye</a>

带有事件的模态 AJAX

use lo\widgets\modal\ModalAjax;

echo ModalAjax::widget([
    'id' => 'updateCompany',
    'selector' => 'a.btn' // all buttons in grid view with href attribute
    'ajaxSubmit' => true, // Submit the contained form as ajax, true by default

    'options' => ['class' => 'header-primary'],
    'pjaxContainer' => '#grid-company-pjax',
    'events'=>[
        ModalAjax::EVENT_MODAL_SHOW => new \yii\web\JsExpression("
            function(event, data, status, xhr, selector) {
                selector.addClass('warning');
            }
       "),
        ModalAjax::EVENT_MODAL_SUBMIT => new \yii\web\JsExpression("
            function(event, data, status, xhr, selector) {
                if(status){
                    if(selector.data('scenario') == 'hello'){
                        alert('hello');
                    } else {
                        alert('goodbye');
                    }
                    $(this).modal('toggle');
                }
            }
        ")
    ]

]);

插件事件

在基本的 Twitter Bootstrap 模态事件之上,以下事件被触发

kbModalBeforeShow (ModalAjax::EVENT_BEFORE_SHOW)

此事件在加载表单视图之前触发。此事件还提供以下附加参数

  • xhr: XMLHttpRequest,用于此事务的 jQuery XML Http Request 对象。
  • settings: object,此事务的 jQuery AJAX 设置。
$('#createCompany').on('kbModalBeforeShow', function(event, xhr, settings) {
    console.log('kbModalBeforeShow');
});

kbModalShow (ModalAjax::EVENT_MODAL_SHOW)

在成功加载表单视图后触发此事件。此事件还提供以下附加参数

  • data: object,通过服务器响应发送的数据对象。
  • status: string,jQuery AJAX 成功文本状态。
  • xhr: XMLHttpRequest,用于此事务的 jQuery XML Http Request 对象。
  • selector: object,在多模态提交后的嵌入逻辑的 jQuery 选择器。
$('#createCompany').on('kbModalShow', function(event, data, status, xhr, selector) {
    console.log('kbModalShow');
});

kbModalBeforeSubmit (ModalAjax::EVENT_BEFORE_SUBMIT)

在表单提交之前触发此事件。此事件还提供以下附加参数

  • xhr: XMLHttpRequest,用于此事务的 jQuery XML Http Request 对象。
  • settings: object,此事务的 jQuery AJAX 设置。
$('#createCompany').on('kbModalBeforeSubmit', function(event, xhr, settings) {
    console.log('kbModalBeforeSubmit');
});

kbModalSubmit (ModalAjax::EVENT_MODAL_SUBMIT)

在表单成功提交后触发此事件。此事件还提供以下附加参数

  • data: object,通过服务器响应发送的数据对象。
  • status: string,jQuery AJAX 成功文本状态。
  • xhr: XMLHttpRequest,用于此事务的 jQuery XML Http Request 对象。
  • selector: object,在多模态提交后的嵌入逻辑的 jQuery 选择器。
$('#createCompany').on('kbModalSubmit', function(event, data, status, xhr, selector) {
    console.log('kbModalSubmit');
    // You may call pjax reloads here
});