Пользовательский проигрыватель Sound Cloud — свойство id содержит нулевую ошибку

У меня возникли некоторые проблемы при работе с пользовательским html5-плеером Sound Cloud (http://developers.soundcloud.com/docs/custom-player), особенно в Internet Explorer (проверено на версиях 7, 8 и 9).

Кажется, всякий раз, когда создается проигрыватель (сейчас это происходит динамически через JS), он сталкивается с ошибкой с функцией в файле «sc-player.js» (предоставляется звуковым облаком здесь).

Ошибка: «Невозможно получить значение или свойство «id»: объект нулевой или неопределенный». Это код, который портит: строка 640 символ 9

 // selecting tracks in the playlist
  $('.sc-trackslist li').live('click', function(event) {
var $track = $(this),
    $player = $track.closest('.sc-player'),
    trackId = $track.data('sc-track').id,
    play = $player.is(':not(.playing)') || $track.is(':not(.active)');
if (play) {
  onPlay($player, trackId);
}else{
  onPause($player);
}
$track.addClass('active').siblings('li').removeClass('active');
$('.artworks li', $player).each(function(index) {
  $(this).toggleClass('active', index === trackId);
});
return false;
});

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

Просто интересно, кто-нибудь еще сталкивался с этим или знает, как обойти это?

РЕДАКТИРОВАТЬ -

Я вручную приложил "тестовые" данные к треку. И это, кажется, устраняет первую ошибку, но, конечно же, вызывает другую. На этот раз такая же ошибка выплевывается на эту строку (в файле sc-player.js):

getPlayerData = function(node) {
   return players[$(node).data('sc-player').id];
}

Это код, который использую для вызова проигрывателя, где аргумент track представляет собой ссылку на страницу с музыкальными треками в soundcloud, а #player представляет собой пустой div, созданный поверх него:

function init_player(track,title) {
  $('.open #player').scPlayer({
   links: [{url: track, title: title}],
   beforeRender  :   function(tracksData) {
      $scplayer = $(this);
      $('.sc-trackslist li, .sc-trackslist li a').data({ id: track});
  }
}

Когда пользователь хочет перейти к другому разделу музыки, у меня есть другая функция, которая очищает контейнер div, добавляет к нему #player (потому что он был перезаписан проигрывателем soundcloud) и повторно запускает вышеуказанную функцию.

Моя проблема заключается во втором запуске функции init_player, я получаю сообщение об ошибке.

Извините за задержку ответа!


person Tom    schedule 10.04.2012    source источник
comment
Алон прав, ошибка здесь: trackId = $track.data('sc-track').id. Можете ли вы убедиться, что элемент имеет атрибут data-sc-track?   -  person nickf    schedule 11.04.2012


Ответы (1)


Эта строка неверна:

trackId = $track.data('sc-track').id,

Я не могу вам больше помочь, потому что мне нужен остальной код...

person Alon Eitan    schedule 10.04.2012