假设我正在用 JavaScript 编写一个简单的单页 Web 应用程序。该应用程序仅显示员工记录。用户输入搜索参数,应用程序使用 AJAX 从服务器获取员工记录并将其显示在网页中。
应用程序状态为search params
和employees
。如何将它们存储在应用程序中?我看到两个选项:
- 只需使用 DOM 隐式存储状态。
- 为 DOM 创建数据结构
search params
并将employees
它们与 DOM 同步。
是否有意义?这两种选择的优缺点是什么?
假设我正在用 JavaScript 编写一个简单的单页 Web 应用程序。该应用程序仅显示员工记录。用户输入搜索参数,应用程序使用 AJAX 从服务器获取员工记录并将其显示在网页中。
应用程序状态为search params
和employees
。如何将它们存储在应用程序中?我看到两个选项:
search params
并将employees
它们与 DOM 同步。是否有意义?这两种选择的优缺点是什么?
在这种情况下,您可以在用户应用过滤器时触发哈希值的更改。例如: http://www.mydomain.com/index.html#name=abc&department=def。您的应用程序会侦听哈希中的更改以进行相应更新。像crossroads.js,sammy.js这样的库允许你这样做。客户端的这种方法借用了服务器端的路由概念。
使用这种方法,您可以将 url 发送给您的朋友以直接“跳转”到应用程序的特定状态,您还可以重复使用它,将其存储在任何地方。
如果您的目标是现代浏览器,那么 Web Storage 将是您研究的一个不错的选择。
在这里写得很好:http: //sixrevisions.com/html/introduction-web-storage/
这样,所有负载都将保留在客户端中,并且数据将在请求之间以及用户离开并返回应用程序时持续存在。
我猜您提到的选项意味着您将在隐藏的 DOM 元素中存储数据将很容易开发,但是您将失去所有持久性。如果您打算走这条路,为什么不直接将数据存储在 javascript 对象中呢?
如果你想让它们持久化,你就不能使用 DOM,你也不应该使用。HTML 用于您的用户界面并将所有内容链接在一起,而不是用于应用程序的数据存储。你有几个选择。您可以在 JavaScript 中使用全局变量,但您必须记住,它们不会在访问您的页面之间持续存在。如果这是您想要的,请继续。
另一种选择是使用 HTML5 的本地存储,它是持久的,专为存储数据而设计。
您的最后一个选项(如果您不想在本地存储数据但确实想持久保存数据,这一点很重要)是使用 HTTP AJAX GET 和 POST 与 servlet 或客户端上分别获取和设置数据的东西.
如果你想走老路,你也可以使用 cookie 代替 Web 存储。我绝对建议后者。
如果您使用 HTML 5,您可能会考虑使用这种杠杆作用:
肯定是后者。DOM 从未被设计为数据结构。另一方面,创建一个架构以使 DOM 与您的自定义数据结构保持同步可能会很痛苦。
幸运的是,有一些框架可以帮助您解决这个问题。其中大多数遵循类似 MVC(或 MV*)的设计模式。示例包括Backbone.js、AngularJS、Spine、Agility.js、JavaScriptMVC等等。周围看看。
还可以查看这个项目:TodoMVC。它可能会帮助您决定是否使用这样的框架,如果是的话,使用哪一个。