Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 集合更新时重新呈现页面_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 集合更新时重新呈现页面

Javascript 集合更新时重新呈现页面,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我正在制作一个简单的多用户播放列表应用程序。我有一个客户端正在观看视频流,而在另一个客户端,我正试图将视频添加到该播放列表中。视频将正确添加到播放列表中,但当更新发生时,页面将重新呈现,视频将在正在观看的客户端上重新启动。我正在尝试获得它,以便当其他用户将视频添加到播放列表时,它可以继续为所有观看它的人播放 {{#constant}} {{#each ...}} .... {{/each}} {{/constant}} 在服务器上,我有: Meteor.publis

我正在制作一个简单的多用户播放列表应用程序。我有一个客户端正在观看视频流,而在另一个客户端,我正试图将视频添加到该播放列表中。视频将正确添加到播放列表中,但当更新发生时,页面将重新呈现,视频将在正在观看的客户端上重新启动。我正在尝试获得它,以便当其他用户将视频添加到播放列表时,它可以继续为所有观看它的人播放

{{#constant}}
    {{#each ...}}
    ....
    {{/each}}
{{/constant}}
在服务器上,我有:

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>');
    }
  });
}
Template.EnteredRoom.load=函数(){
返回videosHandle&!videosHandle.ready();
};
Template.EnteredRoom.room=函数(){
返回房间.findOne(Session.get('room_id'));
};
Template.EnteredRoom.video_objs=函数(){
Session.set('videos',videos.findOne({room\u id:Session.get('room\u id')}))
返回会话。获取(“视频”);
};
Template.EnteredRoom.rendered=函数(){
if(Session.get('videos')&&Session.get('videos').videoIds.length){
var currVid=0,playlist=Session.get('videos').videoid;
renderVid(播放列表,currVid);
};
};
var renderVid=函数(播放列表,currVid){
var video=Popcorn.youtube(“#youtube video”,”http://www.youtube.com/embed/“+播放列表[currVid]+”&autoplay=1’;
video.on(“结束”,函数(){
如果(++currVid
有什么办法可以完成这件事吗

谢谢你的帮助

安德鲁

编辑:
在读了一些书之后,我想我应该以某种方式使用隔离来实现这一点,有什么建议吗?

我想你可以试着把你不需要的部分放在{{常数}}块中。

我更喜欢在模型函数中使用{reactive:false}选项禁用reactive from collection:

返回集合。查找({},{reactive:false})} return collection.find({}, {reactive:false}) }