2015-06-20 2 views
0

My Use caseКак применить поле позиции к коллекции в Meteor mongo?

У меня есть плейлист для онлайн-плеера. В настоящее время они сортируются по естественному порядку, когда они отображаются.

Я хотел бы положить поле для позиции трека в списке воспроизведения.

Что было бы лучшим способом реализовать это для коллекции в meteor mongo db.

Вот моя текущая схема для коллекции моих песен.

//Schema for Songs 
    Schema.Songs = new SimpleSchema({ 
     trackId: { 
     type: String, 
     label: "Track ID", 
     optional: false 
     }, 
     title: { 
     type: String, 
     label: "Name", 
     optional: false 
     }, 
     duration:{ 
     type: Number, 
     label: "Duration", 
     optional: false 
     }, 
     festivalId: { 
     type: SimpleSchema.RegEx.Id, 
     optional: false 
     } 
    }); 

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

Что было бы хорошей отправной точкой для этого?

ответ

0

Самый простой способ, который приходит на ум, - иметь коллекцию под названием playlist, которая в качестве поля называется songs. Поле songs было бы массивом строк. Они будут корочки Songs

Schema.Playlist = new SimpleSchema({ 
    'songs.$': { 
    type: String, 
    } 
}) 

Вы можете создать помощник, чтобы перечислить все song. Назовем это showPlaylist. Он разрешает идентификаторы внутри поля songs их перспективным документам. Я бы сделал массив возвращенным showPlaylist реактивным. Это сэкономит вам некоторую работу.

{{ #each showPlaylist }} 
    <audio id="{{ _id }}" class="song" src="{{ src }}"></audio> 
{{ /each }} 

Теперь вы должны написать что-то для пользователя, чтобы изменить порядок списка и называем это:

function updatePlaylistOrder (oldPos, newPos, id) { 
    var newList = moveElement(Playlists.findOne(id), oldPos, newPos) 
    Playlists.update(playlistId, {$set: {songs: newList}}) 
    return newList 
} 

Credit for the moveElement function в /u/Matt

Смежные вопросы