У меня проблемы с получением функции для правильного выполнения в модуле drupal. Это для сторонней интеграции HTML5-плеера projekktor. Я не смог найти никакой полезной информации на drupal.org.
(function($) {
Drupal.behaviors.projekktor = {
attach: function(context, settings) {
if ($(settings.projekktor.instances).length) {
$('[id^="projekktor-"]', context).once('projekktor', function() {
$(this).each(function() {
var id = $(this).attr('id');
var jsoptions = settings.projekktor.instances[id];
var jspath = settings.projekktor.jspath;
// @WTF: returns 'projekktor is not defined' if $.get isn't used
$.get(jspath, function() {
projekktor('#' + id, jsoptions);
});
});
})
}
}
};
})(jQuery);
Библиотека projekktor загружается в голову. Но по какой-то причине проигрыватель не будет инициализироваться, если я не добавлю библиотеку в функцию $ .get. И это заставляет вещи работать мучительно медленно.
Настройки содержат массивы, которые передаются с php. «jspath» - это просто строка в файле библиотеки. «jsoptions» - это варианты игрока. Эта часть отлично работает. Я просто не могу заставить плеер правильно запускаться.
Он инициализируется нормально из встроенной функции $ (document) .ready. Но это не совсем приемлемый вариант.
Есть идеи?
EDIT:
Я понял, почему это не работает, посмотрев на унифицированный код projekktor. Кажется, функция объявлена так:
jQuery(function($) {
projekktor = $p = function() {
/* projekktor code in here */
}
});
Это объявление функции в области видимости документа.
Так что теперь я немного растерялся из-за того, как я могу запустить его в своей функции, используя скрипт заголовка (без $ .get).
Учитывая, что это сторонняя библиотека, интегрируемая в модуль drupal, я немного расстроен.