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