Взаимодействие javascript между assets в yii2

Рейтинг: 1Ответов: 1Опубликовано: 01.02.2023

Сделал виджет со своим Asset в котором подключается new-widget.js

class newWidget {
    static init(){
        $( "#grid_column_sort ul" ).sortable({
            connectWith: ".connectedSortable",
            placeholder: "ui-state-highlight",
            cancel: ".ui-state-disabled",
        }).disableSelection();
    };
}

У меня есть AppAsset в котором подключается user.js

window.onload = function() {
    newWidget.init();
    $(document)
        .on('pjax:complete', function() {
            newWidget.init();
        })
};

Виджет newWidget подключен не на всех страницах, как лучше проверить его наличие? Или как лучше организовать их взаимодействие?

Ответы

▲ 0

Разорвал связи с помощью делегирования. new-widget.js:

class gcs{
    static enableSortable() {
        $( "#grid_column_sort ul").sortable({
            connectWith: ".connectedSortable",
            placeholder: "ui-state-highlight",
            cancel: ".ui-state-disabled",
        }).disableSelection();
    }

    static init() {
        $(document)
            .on('mouseover', function(event) {
                if (event.target.id === 'grid_column_sort') {
                    let $grid = $("#grid_column_sort");
                    if ($grid.data('init') !== true) {
                        gcs.enableSortable();
                        $grid.data({init: true});
                    }
                }
            })
            .on('click', function(event) {
                if (event.target.id === 'hide_grid_column_sort') {
                    let elem = document.getElementById('grid_column_sort');
                    elem.hidden = !elem.hidden;
                }
            })
    }
}

$(window).on('load', function() {
    gcs.init();
})