Как отключить / переопределить зависимости в Yii2 - PullRequest
0 голосов
/ 12 марта 2019

Задача

'kartik-v \ yii2-dialog', который используется 'kartik-v \ tree-manager', переопределяет окно / сообщение Sweetalert.

Как отключить зависимость дерева-менеджера kartik-v \ yii2-dialog для использования SweetAlerts?

Пробовал :

'assetManager' => ['bundles' => [ 'kartik\dialog\DialogAsset' => ['js' => [],], ... ,

Sweetalert начинает работать в сетках и подтверждать события, но затем менеджер деревьев больше не работает (Uncaught ReferenceError: KrajeeDialog не определен)

в картинках:

Есть:

Kartik-v\dialog

Хотите:

SweetAlert

Любая информация будет принята с благодарностью.

Обновление:

Вот код переопределения, который сработал, но теперь диалоговое окно kartik \ yii2 загружается и переопределяет это:

yii.confirm = function(message, okCallback, cancelCallback) {
if (message.constructor === Array) {
    swal(
        {
            html: true, // SweetAlert1
            title: message[0],
            text: message[1],
            //html: message[1], // SweetAlert2
            //confirmButtonColor: '#E80000',
            confirmButtonColor: message[3],
            //type: 'warning',
            type: message[2],
            showCancelButton: true,
            cancelButtonText: 'Avbryt',
            closeOnConfirm: true,
            allowOutsideClick: true,
            buttonsStyling: false,
        },
        okCallback
    );
} else {
    swal(
        {
            html: true, // SweetAlert1
            title: message,
            type: 'warning',
            showCancelButton: true,
            cancelButtonText: 'Avbryt',
            closeOnConfirm: true,
            allowOutsideClick: true,
            buttonsStyling: false,
        },
        okCallback
    );
}
};

confirm = function(message, okCallback, cancelCallback) {
    if (message.constructor === Array) {
        swal(
            {
                html: true, // SweetAlert 1
                title: message[0],
                text: message[1],
                //html: message[1], // SweetAlert2
                //confirmButtonColor: '#E80000',
                confirmButtonColor: message[3],
                //type: 'warning',
                type: message[2],
                showCancelButton: true,
                cancelButtonText: 'Avbryt',
                closeOnConfirm: true,
                allowOutsideClick: true,
                buttonsStyling: false,
            },
            okCallback
        );
    } else {
        swal(
            {
                html: true, // SweetAlert 1
                title: message,
                type: 'warning',
                showCancelButton: true,
                cancelButtonText: 'Avbryt',
                closeOnConfirm: true,
                allowOutsideClick: true,
            },
            okCallback
        );
    }
};

yii.alert = function(message, okCallback, cancelCallback) {
    swal(
        {
            title: message,
            type: 'warning',
            showCancelButton: false,
            closeOnConfirm: true,
            allowOutsideClick: false,
            buttonsStyling: false,
        },
        okCallback
    );
};

alert = function(message, okCallback, cancelCallback) {
    swal(
        {
            title: message,
            type: 'warning',
            showCancelButton: false,
            closeOnConfirm: true,
            allowOutsideClick: false,
            buttonsStyling: false,
        },
        okCallback
    );
};

1 Ответ

1 голос
/ 13 марта 2019

Хотя есть опция, предоставленная как krajeeDialogSettings в TreeView, которая управляет yii2-dialog с помощью,

'krajeeDialogSettings' => ['overrideYiiConfirm' => true, 'useNative' => true],

В соответствии с документами она должна работать, но для меня это не таксработало, и yii2-dialog всегда отменял подтверждение подтверждения, я хотел исключить приглашение или диалог yii2 из древовидной структуры, и для этого удаление зависимости не так просто, потому что вызовы вложены и интегрированы в сценарий Treeview,

Итак, мне пришлось переопределить krajeeDialog.confirm, куда я загружал виджет TreeView, чтобы при вызове krajeeDialog.confirm вызывался мой диалог подтверждения.

Просто добавьтениже в верхней части окна, где вы загружаете виджет TreeView.

<?php 

 $js = <<< JS

 krajeeDialog.confirm = function (message, callback) {
    swal({
        title: message,
        type: "warning",
        showCancelButton: true,
        closeOnConfirm: true,
        allowOutsideClick: true
    }, callback);
}
JS;
    $this->registerJs($js, yii\web\view::POS_READY);

Хотя мне не понравился двойной подход, но он был единственным, который работал для меня, возможно, кто-то другой мог бы опубликоватьлучшее решение.

...