addScript()
не загружает файл;он добавляет фактический код в переменную $scripts_for_layout
.Идея заключается в том, что макет является хорошим распространенным местом для загрузки ваших файлов JavaScript и кода.Таким образом, вы можете вывести весь код в одном месте - в головном блоке или в конце - так или иначе, вместе.Поэтому, если вы находитесь в ситуации, когда у вас есть код JavaScript в представлении, а не выводите его встроенным образом, вы можете передать его в макет.
Лучший способ загрузить файл сценария - использоватьHTML Helper- echo $this->Html->script("script or array('of', 'scripts')");
Имея это в виду, вы можете $this->set('scripts', 'mega_drop');
в элементе и затем вызвать Html Helper с этой переменной $ scripts из макета.
Проблема с этим: он выигралне работает, если ваш nav_default.ctp вызывается из макета. $ this-> set () работает внутри представления (или элемента, вызываемого из представления), потому что представление визуализируется до макета.Если вы вызываете свой элемент из макета, тогда уже слишком поздно устанавливать viewVars для использования в макете. Лучше всего установить set () переменную scripts из контроллера и использовать if(isset($scripts)) { echo $this->Html->script($scripts); }
в макете.