Как правильно подключить свой JS код в yii2 проекте?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Как правильно подключить свой JS код в yii2 проекте?

Сообщение voodooism »

Я пишу небольшую JS библиотеку для bootstrap-collapse.
Столкнулся с такой проблемой, что когда верстка на странице генерируется с помощью Yii2-виджета Collapse, то в самый конец тэга <body> прописывается примерно следующее:

Код: Выделить всё

jQuery(function ($) {
    jQuery('#w0').collapse();
    jQuery('#w1').collapse();
    jQuery('#w2').collapse();
    jQuery('#w3').collapse();
    jQuery('#w4').collapse();
});
Это обусловлено следующим кодом в методе Run виджета Collapse

Код: Выделить всё

public function run()
    {
    	//Тут вызывается метод из трейта BootstrapWidgetTrait
        $this->registerPlugin('collapse');
        return implode("\n", [
            Html::beginTag('div', $this->options),
            $this->renderItems(),
            Html::endTag('div')
        ]) . "\n";
    }
    
    //Код метода из трейта
    protected function registerPlugin($name)
    {
        $view = $this->getView();

        BootstrapPluginAsset::register($view);

        $id = $this->options['id'];

        if ($this->clientOptions !== false) {
            $options = empty($this->clientOptions) ? '' : Json::htmlEncode($this->clientOptions);
            $js = "jQuery('#$id').$name($options);";
            $view->registerJs($js);
        }

        $this->registerClientEvents();
    }    
Вызовы этих функций влияют на функционирование моей библиотеки.
В том случае если я подключаю код с помощью $this->registerJsFile() он в любом случае будет ниже чем код подключенный с помощью $this->registerJs()
Конечно, я тоже могу воспользоваться методом $this->registerJs() и прописать свой JS код уже в конец того скрипта который создается при инициализации виджета, но этот метод кажется мне костыльным. Есть идеи как можно реализовать это более грамотно?
voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Re: Как правильно подключить свой JS код в yii2 проекте?

Сообщение voodooism »

Второй вариант который я придумал выглядит следующим образом:
В файле MyJsLibraryAsset.php я переопределяю метод registerAssetFiles() следующим образом:

Код: Выделить всё

    public function registerAssetFiles($view)
    {
        parent::registerAssetFiles($view);
        $view->registerJs('funcName()');
    }
И внутри моего файла MyLibrary.js я оборачиваю весь код в функцию funcName() следующим образом:

Код: Выделить всё

function funcName() {
    //here all my code...
}
Это помогает мне добиться желаемого, но всеравно мне кажется я делаю что то не так :(
Ответить