通过 html 类维护 javascript 中的状态
Maintaining state in javascript through html class
我正在创建一个网络应用程序,用户可以在其中为某些位置添加书签。
为此,我创建了一个 span
元素,该元素最初具有类no-bookmark
。每当用户单击此 span 元素时,我都会检查 span 是否具有上述类。如果有,则意味着用户想要为该地点添加书签,我会向服务器发送ajax请求,然后将类更改为has-bookmark
。
如果用户单击范围并且它没有类no-bookmark
,那么我假设用户想要删除书签,并向服务器发送请求。
有没有更好的方法来保持状态,或者这种方法足够好?
它确实将逻辑与UI混合在一起,但这样做并不是太糟糕,这可能很难长期维护。
不过有一个问题。如果提交请求(无论是设置还是删除书签)但失败,会发生什么情况?那么你的班级与现实脱节。
您还需要记住,其他事情可能会更改 CSS 类。任何形式的客户端代码都可能更改类,因此也要警惕这一点。
另外,当用户关闭页面并稍后重新打开它时会发生什么?除非你不关心长期状态,否则你仍然需要在某个地方有另一个设置来跟踪。
如果您确实关心长期状态,则可以使用 cookie、本地存储或后端存储来维护该状态,具体取决于系统的设计。在这种情况下,尝试纯粹在类中维护状态可能没有任何好处,尽管该类可能仍然有用,但仅用于 UI 目的,但在 JS 变量中跟踪状态会更健壮。
你可以看看像 REACT 这样的东西来帮助你做这些事情。以一些初始负载"重量"为代价,您可以在保持状态和保持反应方面获得很多帮助。
对于这个答案,我认为您可以访问服务器 API,并且状态 - 某些用户 ID 和书签项,可以随时由 API 检索。如果我的假设不正确,请立即停止阅读。
因此,服务器(可能是通过某个数据库)总是知道某个用户(例如user087
当前已将项目item118
书签)添加为书签。当 ajax 加载了 <span>
s 列表时,对于每个项目,我会得到给定用户 id 和项目 id 的值 true/false
,无论它是否是书签。然后,我将适当的样式设置为跨度。
通过这种方式,您可以有效地将逻辑与用户界面分开,并且一旦加载<span>
,您始终具有正确的状态,并且独立于浏览器行为。
编辑
在提问者的评论之后。此外,您可以将加载的状态填充到对象中。使用此类对象的一个例子是计算(并显示)用户的书签总数,或者在有很多书签时搜索书签,而不必使用 ajax。因此,在加载之间,您可以拥有状态的临时本地数据库。
- 使用javascript反复检查用户在facebook上的登录状态
- 使用纯javascript而非jquery使所选选项卡处于活动状态并保持非活动状态
- 返回上一页时,Javascript仍处于活动状态
- 使用PHP或Javascript获取服务器状态
- 如何使用Javascript检查当前鼠标按钮状态
- 基于javascript中的状态字段对动态行数据进行动态着色
- 使用JavaScript'持久化CSS状态;s的`window.cookie`
- 如何将JavaScript自动POST的状态代码获取到另一个域
- 如何删除JavaScript画布呈现上下文的状态堆栈
- JavaScript和Html代码来运行所有类型的视频并获取状态
- Javascript MVVM 设计模式 - 如何跟踪脏状态以及谁应该做 Ajaxing
- 在单击按钮时激活按钮的悬停状态,直到单击另一个按钮(Javascript/JQuery)
- 使用 javascript 获取复选框的状态
- 在 JavaScript 中评估屏幕阅读器的当前状态
- 检查复选框状态-Javascript
- 检查单选按钮的状态(javascript/canvas)
- 使表数据显示在悬停状态(javascript/jQuery或css)
- 保存当前页面状态javascript
- 动画播放状态Javascript
- 确定GPS状态javascript