Объекты Spotify List, созданные из данных localStorage, отображаются пустыми - PullRequest
1 голос
/ 15 марта 2012

Я работаю над приложением Spotify и пытаюсь создать объект views.List из некоторой хранимой информации в нашей базе данных. При начальной загрузке выполняется POST для получения необходимой информации. Я храню это в локальном хранилище, чтобы каждый последующий запрос мог избежать попадания в базу данных и получить объект локально. Однако происходит то, что объекты List, которые я создаю из данных localalstorage, остаются пустыми, а запросы POST работают нормально.

Вот фрагмент, который я использую для создания списка:

var temp_playlist = models.Playlist.fromURI(playlist.uri);
var tempList = new views.List(temp_playlist, function (track) {
    return new views.Track(track, views.Track.FIELD.STAR |
                views.Track.FIELD.NAME |
                views.Track.FIELD.ARTIST |
                views.Track.FIELD.DURATION);
});

document.getElementById("tracklist").appendChild(tempList.node);

playlist.uri в первой строке - это то, что я извлекаю из POST или из localalstorage. Результирующий объект views.List (tempList) выглядит одинаково в обоих случаях, за исключением tempList.node. Тот, который получен из localstorage, показывает эти значения для innerHTML, innerText, outerHTML и outerText в console.log:

innerHTML: "<div style="height: 400px; "></div>"
innerText: ""
outerHTML: "<div style="height: 400px; "></div>"
outerText: ""

Принимая во внимание, что тот, который получен через POST, содержит полные данные:

innerHTML: "<div style="height: 400px; "><a href="spotify:track:07CnMloaACYeFpwgZ9ihfg" class="sp-item sp-track sp-track-availability-0" title="Boss On The Boat by Tosca" data-itemindex="0" data-viewindex="0" style="-webkit-transform: translateY(0px); ">....
innerText: "3Boss On The BoatTosca6:082....

и т. Д.

Любая помощь будет принята с благодарностью

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Решено это.

Я использую hide () и show () для отображения вкладок в моем приложении. Я создавал треклист, а затем показывал () div, который привел к пустому треклисту. Если я просто покажу () элемент div, а затем создам треклист, он работает нормально.

Причина (я думаю), что он работал для POST, заключается в том, что треклист был извлечен из базы данных, и немного более длительное время загрузки, вероятно, означало, что треклист был создан после выполнения функции div (). С localStorage я думаю, что треклист был создан еще до того, как div был показан, что привело к ошибке.

0 голосов
/ 08 февраля 2013

Я думаю, что мне действительно удалось решить эту проблему, и я думаю, что это пуленепробиваемый.

По сути, я пытался решить эту проблему, пытаясь убедить API в том, что ему необходимо перерисовать список воспроизведения, скрывая объекты / прокручивая объекты / перемещая объекты, которые работали время от времени, но никогда последовательно. Мне никогда не приходило в голову изменить сам плейлист. Или, по крайней мере, заставьте API думать, что список воспроизведения изменился.

Вы можете сделать это, запустив событие в объект Playlist.

var models = sp.require('$api/models');

...

// playlist is your Playlist object. Usually retrieved from models.Playlist.fromURI
playlist.notify(models.EVENT.CHANGE, playlist);

Это просто стандартные функции Spotify, и список обновляется, потому что он думает, что что-то изменилось в списке воспроизведения. Надеюсь, это кому-нибудь поможет!

0 голосов
/ 15 марта 2012

Используя локальное хранилище, я сделал это так:

sp = getSpotifyApi(1);
var m = sp.require("sp://import/scripts/api/models");
var v = sp.require("sp://import/scripts/api/views");

var pl;
pl = m.Playlist.fromURI(uri);
var player = new v.Player();
player.track = pl.get(0);
player.context = pl;
var list = new v.List(pl);
XXXXX.append($(list.node));

Надеюсь, это поможет, так как у меня работает

...