Meteor 我应该如何设计多屏幕功能?

Meteor 我应该如何设计多屏幕功能?,meteor,Meteor,我使用一个带有工作区的webapp,用户可以在其中创建、加载和编辑文档。这个工作区由几个区域组成,每个区域负责工作的一部分。加载到工作区中的一组文档称为“项目”,并存储在“项目”集合中 项目中涉及的数据有两种类型: 附加到项目的一组文档。它存储在“项目”集合中的mongo文档中 特定用户正在处理的当前文档。我还没有存储它,我只是使用一组全局反应变量来加载一个文档和用户单击它时附加的信息。这意味着每次用户访问工作区/项目时,他都不会找到以前加载的文档,但根本不会加载任何文档 现在,我想存储第二类数

我使用一个带有工作区的webapp,用户可以在其中创建、加载和编辑文档。这个工作区由几个区域组成,每个区域负责工作的一部分。加载到工作区中的一组文档称为“项目”,并存储在“项目”集合中

项目中涉及的数据有两种类型:

  • 附加到项目的一组文档。它存储在“项目”集合中的mongo文档中
  • 特定用户正在处理的当前文档。我还没有存储它,我只是使用一组全局反应变量来加载一个文档和用户单击它时附加的信息。这意味着每次用户访问工作区/项目时,他都不会找到以前加载的文档,但根本不会加载任何文档
  • 现在,我想存储第二类数据,其中有一个主要要求:允许用户在“扩展模式”下工作,其中一个面板位于专用浏览器窗口中(假定位于另一个屏幕上)。这意味着,如果他单击窗口中的某个文档,该文档将加载到另一个窗口/屏幕中

    据我所知,我无法将信息直接从一个浏览器窗口发送到另一个浏览器窗口。我必须使用服务器来传递信息。因此,用户单击一个文档>新加载的文档id被发送到服务器>另一个窗口相应地更新

    我的假设正确吗?(服务器必须中继该信息)

    为了实现此功能,我想出了两种解决方案:

  • 我将“项目”字段附加到用户配置文件mongo文档。在每个字段中,我将为每个项目加载最后一个项目,并使用此字段从一个屏幕更新另一个屏幕
  • 我在每个项目文档中创建一个特定字段,对于在项目中工作的每个用户,我存储当前加载的文档及其设置
  • 第一个选项假设加载每个项目信息以及用户配置文件(即,在每个页面中),并可能导致发送多次无用信息

    第二个选项将在用户每次为每个连接到项目的用户加载项目(而不实际修改项目)时触发meteor反应机制


    每个选项都有严重的缺点,我想知道哪一个对您来说似乎更好,以及您是否可以考虑其他替代方案。

    您应该能够使用Meteor的其中一个选项,特别是如果您不担心不支持非HTML5浏览器的话。。。无法提供大量关于哪些内容没有使用的指导,但HTML5本地存储可以跨选项卡使用,似乎是一个存储数据的好地方,无需往返服务器,同时也允许数据在选项卡之间持久化

    您还可以通过向应用程序中添加一个侦听器,用于本地存储
    setitem()
    removietem()
    事件,从而推出您自己的实现(可能比试图找到一个完全符合您需要的包要简单),下面的代码就是从中无耻地复制出来的

    if (window.addEventListener) {
      // Normal browsers
      window.addEventListener("storage", handler, false);
    } else {
      // for IE (why make your life more difficult)
      window.attachEvent("onstorage", handler);
    };
    
    function handler(e) {
      console.log('Successfully communicate with other tab');
      console.log('Received data: ' + localStorage.getItem('data'));
      //Add in your code to display the document on the second tab
    }
    
    localStorage.setItem('data', 'hello world');
    

    你的问题太宽泛了。试着一次只关注一个问题,而不是轮询用例的解决方案,让我们判断哪个选项是最好的。例如:在windows之间交换数据。