如何在Yii2中禁用/覆盖依赖关系

时间:2019-03-12 09:27:37

标签: javascript yii2 assets sweetalert kartik-v

问题

“ kartik-v \ tree-manager”使用的“ kartik-v \ yii2-dialog”会覆盖Sweetalert对话框/消息框。

为了使用SweetAlerts,如何禁用树视图管理器的依赖性'kartik-v \ yii2-dialog'?

尝试

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

Sweetalert开始在网格中工作并确认事件,但是treemanager不再起作用(未捕获的ReferenceError:未定义KrajeeDialog)

在图片中:

拥有:

Kartik-v\dialog

想要:

SweetAlert

任何输入将不胜感激。

更新:

这里是有效的替代代码,但是现在kartik \ yii2-dialog随后被加载并覆盖此代码:

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 个答案:

答案 0 :(得分:1)

尽管krajeeDialogSettings中有一个TreeView选项,它通过使用来控制yii2-dialog

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

根据文档,它应该可以工作,但是对我来说却没有用,yii2-dialog总是取代了Sweetalert的确认,我想从树状视图中排除提示或yii2-dialog,并且删除依赖项并不是那么简单,因为调用是嵌套并集成在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);

尽管我不喜欢双重方法,但这是唯一对我有用的方法,也许其他人可以发布更好的解决方案。