Невозможно использовать jQuery


Хорошо, я пытаюсь сделать очень простую вещь: используйте jQuery в моем файле myScript.js. Я нахожусь на Magento 1.9.0.1. Тема, которую я создаю, основана на встроенной теме rwd, которая по умолчанию загружает jQuery 1.10.2 в режиме noConflict локально (в отличие от Google cdn). Если я попытаюсь выполнить функцию jQuery в myScript.js, я получу следующую ошибку (в моей консоли разработчика Chrome): Ошибка ссылки: jQuery не определен . Однако, если я помещу ту же функцию внутрь <script> где-то в HTML это работает так, как ожидалось.

Итак, я провел некоторое исследование и покопался, и, похоже, проблема связана с порядком загрузки файлов .js в заголовке страницы, где myScript.js загружается до jquery-1.10.2.min.js. Я перепробовал много разных способов исправить это (пытаясь вызвать myScript.js после jQuery) - я переместил строку в page.xml, которая вызывает jQuery, до вызова myScript.js. Я переместил вызов myScript в local.xml , где я положил его в самом низу. Нет что бы я ни делал, я не могу заставить myScript.js загружаться после jquery-1.10.2.min.js. Порядок загрузки в <head> всегда, всегда будет одним и тем же, независимо от того, в каком порядке я их перечисляю. Я могу заставить любой файл вообще не загружаться, удалив его вызов из page.xml, поэтому я знаю, что редактирую правильный файл.

TL;DR: Как я могу заставить myScript.js загрузить после jQuery?

Заранее спасибо!

P.S. Правильно ли я использую backtick markdown в своем вопросе? Такое чувство, что я действительно им пользуюсь часто, но я верю, что следую рекомендациям. Любая стилистическая помощь будет признательна:)

Author: Rohit, 2014-07-28

1 answers

Ответ

Чтобы заставить его загружаться после jQuery в head, не используйте addJs, а используйте <action method="addItem"><type>skin_js</type>, так как скин загружается после библиотек (addJs)

В качестве примечания

  1. Мой предпочтительный метод написания сценариев пользовательского jQuery заключается в добавлении шаблонов в before_body_end; для этого нет действия addJs, поэтому вместо этого вы создадите файл шаблона, который включает тег сценария с getSkinUrl. Это гарантирует, что ваш скрипт не блокируется. В Magento это может показаться смешным (из-за огромного количества сценариев в head), но лучше придерживаться наилучшей практики, когда речь идет о ваших настройках.

  2. Вместо того, чтобы использовать jQuery, платформа RWD использует noConflict для псевдонима, чтобы $j:

Файл: skin/frontend/rwd/default/js/app.js

// ==============================================
// jQuery Init
// ==============================================

// Avoid PrototypeJS conflicts, assign jQuery to $j instead of $
var $j = jQuery.noConflict();
 3
Author: philwinkle, 2014-07-28 16:49:43