我正在制作一个简单的多用户播放列表应用程序。我有一个客户端正在观看视频流,另一个我试图将视频添加到该播放列表中。视频正确地添加到播放列表,但是当更新发生时,页面重新呈现并且视频在刚刚观看的客户端上重新开始。我试图得到它,以便当其他用户将视频添加到播放列表时,它会继续为所有正在观看它的人播放。
在服务器上我有:
Meteor.publish('videosQue', function (room_id) {
return Videos.find({room_id: room_id});
});
在客户端我将其设置为todo示例:
var videosHandle = null;
Deps.autorun(function(){
var room_id = Session.get('room_id');
if (room_id)
videosHandle = Meteor.subscribe('videosQue', room_id);
else
videosHandle = null;
});
然后这里有一些适用于某个人在一个房间的代码:
Template.EnteredRoom.loading = function () {
return videosHandle && !videosHandle.ready();
};
Template.EnteredRoom.room = function () {
return Rooms.findOne(Session.get('room_id'));
};
Template.EnteredRoom.video_objs = function () {
Session.set('videos', Videos.findOne({room_id: Session.get('room_id')}))
return Session.get('videos');
};
Template.EnteredRoom.rendered = function () {
if (Session.get('videos') && Session.get('videos').videoIds.length) {
var currVid = 0, playlist = Session.get('videos').videoIds;
renderVid(playlist, currVid);
};
};
var renderVid = function(playlist, currVid) {
var video = Popcorn.youtube('#youtube-video', 'http://www.youtube.com/embed/' + playlist[currVid] + '&autoplay=1');
video.on("ended", function() {
if (++currVid < playlist.length)
renderVid(playlist, currVid);
else {
$('#youtube-video').hide();
$('#video-container').append('<div style="font-size:30px;color:white;">No Videos :( Try adding one!</div>');
}
});
}
无论如何要完成这项工作?
感谢您的帮助!
安德鲁
编辑: 在做了一些阅读后,我认为我应该以某种方式使用isolate来实现这一点,任何建议?
答案 0 :(得分:0)
我认为您可以尝试在{{#constant}}块中放置不需要反应的部分。
{{#constant}} {{#each ...}} .... {{/each}} {{/constant}}
我更喜欢在模型函数中使用{reactive:false}选项禁用来自集合的反应:
{{1}}