Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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_Messaging_Globals - Fatal编程技术网

Javascript 消息传递类和全局状态

Javascript 消息传递类和全局状态,javascript,messaging,globals,Javascript,Messaging,Globals,这是一个前端项目,它使用socket.io与服务器进行所有通信。这允许按,但我们被要求提供一个暂停按钮。“暂停”按钮用于在用户不希望数据在UI上自动更改的情况下,阻止数据在UI上更改 我们有一个类包装web套接字,并提供对socket.io的最小包装 问题是,我们不能只关掉插座。用户交互需要继续工作,对于哪些消息需要忽略,不同的视图有不同的规范 最终,这是一个大的全局布尔值。我不希望它真的是一个全局变量,因此,以下是我到目前为止的想法: 全球 // A non pausable liste

这是一个前端项目,它使用socket.io与服务器进行所有通信。这允许按,但我们被要求提供一个暂停按钮。“暂停”按钮用于在用户不希望数据在UI上自动更改的情况下,阻止数据在UI上更改

我们有一个类包装web套接字,并提供对socket.io的最小包装

问题是,我们不能只关掉插座。用户交互需要继续工作,对于哪些消息需要忽略,不同的视图有不同的规范

最终,这是一个大的全局布尔值。我不希望它真的是一个全局变量,因此,以下是我到目前为止的想法:


全球

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  socket.on('myPausable', function(data){
      if(window.isPaused){ return false; }
      // do thing
  });

通过值

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  socket.on('myPausable', function(data, isPaused){
      if(isPaused){ return false; }
      // do thing
  });

包装方法

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  socket.onLive('myPausable', function(data){
      // do thing
  });

单独上课

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  liveData.on('myPausable', function(data){
      // do thing
  });
目前,在套接字上有很多消息传递,并且UI上只有一个“暂停”切换,因此这需要小心完成。我们感谢您的建议和最佳实践



我最初在“程序员”上发布了这篇文章,创建一个单独的UI模块怎么样,该模块负责UI上的所有更新。大概是这样的:

var UI = {
    paused: false,
    exec: function(func){
        if(!this.paused){
            func();
        }
    }
}

liveData.on('myPausable', function(data){
    UI.exec(function(){
        // do stuff
    });
});

pauseButton.click(function(){
    UI.paused = true;
});

+谢谢你的帮助。问题是已经有很多代码在使用套接字侦听器,将所有这些代码移到一个新模块中似乎是不可行的。UI模块与现有的套接字代码完全分离。它只是一个全局单例,其他代码可以将UI任务委托给它。我在下面添加的侦听器用于演示目的。由于
UI
模块是全局可访问的,因此您的其他代码现在可以保留在任何地方。