【问题标题】:How to make changes made by javascript persistent (rails)如何使javascript持久化(rails)所做的更改
【发布时间】:2016-05-05 13:37:44
【问题描述】:

我正在尝试使 javascript 所做的更改持久化。 具体来说,我有一个 Rails 应用程序,它允许用户“喜欢”其他用户的帖子。当用户喜欢(喜欢)帖子时,或者创建新的favorite 时,我希望使用 javascript 和/或 jQuery(我看不到任何其他方式来做到这一点)。问题是当我重新加载页面时,更改不是持久的,背景颜色变成了默认颜色。

我尝试了以下方法,但都没有奏效;

addClass 结合removeClass

append <style> ... </style> 直接标记,因此样式的更改可以持久,但不会成功。

我已经在app/views/favorites/create.js.erb 和直接在使用<script> ... </script> 标签显示收藏帖子的视图模板中尝试了上述方法。

任何建议将不胜感激。

【问题讨论】:

  • 当用户点赞帖子时,您是否成功地将favorite(或类似名称)保存到数据库中?
  • 对我来说,jvillian 所问的是情况的症结所在。我个人不喜欢将任何特定于视图的内容存储到数据库中,但如果您坚持“最喜欢”的概念,也许您可​​以根据该状态切换 UI 行为?
  • 我有 favorite 模型存储在数据库中,我使用 Ajax 请求来创建/销毁资源。我想要的只是一个客户端逻辑,它可以允许 javascript 所做的修改是持久的。但是由于这似乎需要在数据库中存储 UI 数据,你说这不是正确的方法,所以我决定不实现这个功能。你能告诉我为什么将 UI 信息存储在数据库中是个坏主意吗?
  • @humblearner 我已经用一个例子更新了我的答案。你可以得到一个想法。

标签: javascript jquery css ruby-on-rails


【解决方案1】:

要使数据持久化,您需要将其存储在数据库中。您可以发出 ajax 请求并将like 事务保存在数据库中。在成功的 ajax 请求时,您可以使用 addClassremoveClass 修改元素。这些更改将在重新加载时丢失。

根据db中保存的值,需要在前端分配类。您必须在erb 文件中写入相同的元素修改。

<div class=<%= liked?(post, current_user) ? 'liked-class' : 'not-liked-class' %>>
</div>

你需要这样的东西。上面的代码只是一个例子。您需要编写liked? 辅助方法逻辑、类名等。

【讨论】:

  • 对我来说,在数据库中保存 UI 信息是一种“异味”。如果保存的内容代表业务逻辑值的概念状态,对我来说是个例外。 “收藏夹”的概念似乎是有效的数据库信息,而保存更多的 SQL 式事务信息对我来说是错误的。只是一个意见,这就是为什么我只是把它放在这里作为评论
  • 是的,是的。我不建议将 ui 信息保存在 db 中。只是likefavorite 数据。数据库似乎是存放此类数据的正确位置。
  • 啊,我完全误解了“像交易”。我在 ActiveRecord::Transaction 周围的某个地方回答另一个问题,所以我的大脑已经在那个空间里了。那我同意你的观点。感谢您的澄清。
猜你喜欢
  • 2020-01-09
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多