Включение файла JS в представление в YII

Я хочу загрузить файл JS, чтобы избежать чрезмерной загрузки моего приложения. Я использую этот файл JS для просмотра CgrdView. Итак, я попробовал это:

Yii::app()->clientScript->registerScriptFile(
Yii::app()->baseUrl.'/assets/9d419b82/jquery.ba-bbq.js?v=1.0.127'
);

в заголовке «Мое представление». Но я получаю сообщение об ошибке: Uncaught ReferenceError: jQuery не определен Как уже говорилось, я хочу загрузить файл jquery.ba-bbq.js в поле зрения CgriView, но я не могу его загрузить. Вместо этого я использую следующее, но не знаю, эффективный способ загрузки или нет.

<script src="/assets/9d419b82/jquery.ba-bbq.js?v=1.0.127" type="text/javascript"></script>

И работает, когда я загружаю это в макеты, но это неэффективный способ.

К вашему сведению: я работаю с полем поиска cgridview, чтобы опубликовать запись окна поиска в моем контроллере.


person tnchalise    schedule 07.01.2013    source источник
comment
Не помещайте свои пользовательские файлы в каталог ресурсов, это для автоматически сгенерированных файлов Yii, гораздо лучше использовать свой собственный каталог (например, /webroot/js/jquery.ba-bbq.js?v=1.0.127). Информационная ссылка может оказаться полезной.   -  person Stu    schedule 07.01.2013
comment
Точно, я хочу автоматически загрузить файл js с помощью cgridview...   -  person tnchalise    schedule 07.01.2013
comment
yii будет автоматически загружать свои собственные файлы, когда они ему понадобятся, вы никогда не должны ссылаться на каталоги ресурсов? Yii создал jquery.ba-bbq.js или вы создали этот файл?   -  person Stu    schedule 07.01.2013
comment
Я думаю, YII владеет jquery.ba-bbq.js. Если нет, я не знаю, что дальше .. предложите мне ..! Любая помощь будет приемлемой.   -  person tnchalise    schedule 07.01.2013
comment
Разве CGridView не загружает ba-bbq.js автоматически? Я не уверен, что вы пытаетесь сделать здесь вручную?   -  person ernie    schedule 07.01.2013
comment
@ernie Есть ли способ загрузить этот JS-файл в View, не включая его в макеты ..?   -  person tnchalise    schedule 08.01.2013


Ответы (1)


Скрипт bbq доступен как основной скрипт, и его регистрация также загрузит jquery.js. Итак, чтобы использовать барбекю, вам просто нужно сделать это:

Yii::app()->clientScript->registerCoreScript('bbq');

Папка активов является динамической по своей природе и используется для хранения скриптов, css, изображений в доступном через Интернет каталоге. Он автоматически заполняется различными виджетами Yii, а также при вызове registerCoreScript. По этим причинам и многим другим вам не следует полагаться на то, что папка с ресурсами включает js, css , изображения, но вместо этого пусть фреймворк включит их для вас.


Я не смог найти список основных пакетов в документации, но его можно увидеть в исходном файле: framework/web/js/packages.php.


Если вам нужно это в представлении с CGridView, то позвольте мне сказать вам, что CGridView загружает этот скрипт автоматически, и вам не нужно его снова регистрировать.

person bool.dev    schedule 08.01.2013
comment
Я немного смущен. Часть, в которую включен файл bbq, скрыта на странице просмотра, когда мы просматриваем ее как источник страницы? Я хочу сказать, что, если мы хотим увидеть исходный код страницы? Действительно ли это преобразовано в ‹script src=/assets/9d419b82/jquery.ba-bbq.js?v=1.0.127 type=text/javascript›‹/script›?? Предложите мне реальные различия ..! К вашему сведению: ваше предложение не работает для меня ... я все еще не могу загрузить этот файл. - person tnchalise; 08.01.2013
comment
да, так и должно быть, но у меня нет части v=. Можете ли вы показать мне ваш фактический файл просмотра? и что именно вы подразумеваете под реальной разницей и разницей между чем? - person bool.dev; 08.01.2013
comment
Yii::app()-›clientScript-›registerCoreScript('bbq'); === ‹script src=/assets/9d419b82/jquery.ba-bbq.js?v =1.0.127 type=text/javascript›‹/script› ? - person tnchalise; 08.01.2013
comment
нет Yii::app()->clientScript->registerCoreScript('bbq');, вероятно, даст вам что-то вроде <script src="/assets/somerandomstring/jquery.ba-bbq.js" type="text/javascript"></script>. то есть somerandomstring может быть чем угодно, это может быть 9d419b82 или что-то еще. не могли бы вы сказать мне еще раз, у вас уже есть gridview в этом представлении? - person bool.dev; 08.01.2013
comment
Да, у меня есть CGridView в моем файле просмотра, в котором есть несколько столбцов и строка с полем поиска для каждого из столбцов, когда я пишу ‹script src=/assets/9d419b82/ jquery.ba-bbq.js?v=1.0.127 type=text/javascript›‹/script› в моем файле просмотра, он работает. Но когда я использую Yii::app()-›clientScript-›registerCoreScript('bbq'); или что-то подобное, это не работает. Я на самом деле не знаю, где я сложен. - person tnchalise; 08.01.2013
comment
хорошо, вы пробовали не добавлять js в layout/view, а только определять gridview? потому что, как уже было сказано, gridview загружает bbq сам по себе, поэтому вам не нужно снова включать bbq - person bool.dev; 08.01.2013
comment
давайте продолжим это обсуждение в чате - person tnchalise; 08.01.2013