Iterating through a linked-list in a cleaner manner
Here's a bit of "light" refactoring. I've basically moved the element constructing into its own function to keep the while-block less crowded.

I'm also using some closure magic for the contextmenu, so it doesn't have to re-get the clicked item.

Lastly, I'm going more by the current ID rather than the current object when looping. This was to avoid the "get the id to get the object to get its id again" code that I see a few places in your version.

function buildListItem(item) {
  var listItem = $('&lt;li/&gt;', {
    contextmenu: function (event) {
      contextMenu.initialize(item); // available via closure
      contextMenu.show(e.pageY, e.pageX + 1);
      return false;
    }
  });

  listItem.append($('&lt;img&gt;', {
    'class': 'playlistItemVideoImage',
    'src':   'http://img.youtube.com/vi/' + item.get('video').get('id') + '/default.jpg'
  }));

  listItem.append($('&lt;a/&gt;', {
    text: item.get('title')
  }));

  return listItem;
}

var firstItemId   = activePlaylist.get('firstItemId'),
    allItems      = activePlaylist.get('items'),
    currentItemId = firstItemId,
    currentItem;

do {
  currentItem = allItems.get(currentItemId);             // get the obj
  if(!currentItem) {
    break;                                               // stop if it ain't there
  }
  playlistItemList.append(buildListItem(currentItem));   // build the list item element
  currentItemId = currentItem.get('nextItemId');         // get the next ID
} while(currentItemId &amp;&amp; currentItemId !== firstItemId); // I'm assuming that valid IDs are thruth'y


Another thing to consider would be to use rawer HTML because it can be faster.