Polymer 1.x:如何在注销后重置整个应用程序

Polymer 1.x:如何在注销后重置整个应用程序,polymer,polymer-1.0,polymer-1.x,Polymer,Polymer 1.0,Polymer 1.x,我有一个聚合物应用程序。当用户注销时,我想将整个应用程序重置为其原始状态。(现在,当用户注销后重新登录时,应用程序会将用户返回到他们注销时所在的应用程序状态和页面。) 是否有任何方便(即全球)的应用程序设计或代码模式来实现这一点?如果没有任何方便/全局的方法,请说明如何在本地(即,在逐个元素的基础上)实现这一点 编辑 经过一些研究(),到目前为止,似乎有两个主要的建议。欢迎其他人 重新加载浏览器 可以使用JS语句强制刷新浏览器页面: location = location; 这个解决办法令我

我有一个聚合物应用程序。当用户注销时,我想将整个应用程序重置为其原始状态。(现在,当用户注销后重新登录时,应用程序会将用户返回到他们注销时所在的应用程序状态和页面。)

是否有任何方便(即全球)的应用程序设计或代码模式来实现这一点?如果没有任何方便/全局的方法,请说明如何在本地(即,在逐个元素的基础上)实现这一点

编辑 经过一些研究(),到目前为止,似乎有两个主要的建议。欢迎其他人

重新加载浏览器 可以使用JS语句强制刷新浏览器页面:

location = location;

这个解决办法令我不满意。它本质上是一种黑客行为,会造成性能问题和其他不良副作用,如等待屏幕刷新和重新绘制

无状态体系结构
有人建议使用无状态应用程序架构。但我不知道如何在聚合物应用程序的编码上下文中实现它。同样,欢迎您提出建议和想法。

我提出的最佳解决方案是在用户注销时使用
location.reload()
方法刷新浏览器

诀窍是你必须为你的应用程序添加一些独特的逻辑,以防止出现无休止的循环情况

注销时重新加载:
user: {
  ...
  observer: '_userChanged',
},
...
_userChanged: function() {
  var bool = this.foo(); // Add logic here to prevent endless loop condition
  if( !this.user && bool ) {
    location.reload();
  }
},

几种可能的解决办法包括:

  • 清除本地存储中的会话及其存储位置
  • 维护所有用户定义信息的路径,并在注销时将这些对象设置为
    {}
  • 以匿名来宾用户身份登录,新用户将覆盖以前的用户信息
  • 保留原始主包装器元素状态的深度副本克隆,然后用旧元素替换当前元素
  • 合并更改如果用户数据保存在属性或批注中,则这些更改将被重置
  • 替换维护用户信息的一个元素

  • 无状态意味着,到目前为止,应用程序的行为取决于用户的操作。如果这个用户一次又一次地重复相同的动作,他会一直这样做并看到相同的动作(基本上)。@sascha10000:谢谢。作为一个示例,你能指出一个使用无状态架构的聚合应用程序吗?在我看来,Polymer应用程序本质上是有状态的,因为它基本上依赖于数据绑定、属性和其他拥有状态的实体。不,我不知道任何Polymer应用程序。但也许你会发现一些关于“无状态与有状态”讨论的有趣文章