Rails技术在重定向后执行javascript
Rails应用程序(3.2.8)和TurboLink(不确定是否相关)已启用Rails技术在重定向后执行javascript,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,Rails应用程序(3.2.8)和TurboLink(不确定是否相关)已启用 我有一些信息,在用户显示页面上有一个链接。(例如,某事物已发生变化的通知。) 当用户点击链接时,我想引导他进入页面和 视觉上突出显示已更改的元素。 目前我正计划这样处理: 创建链接,使其具有以下形式: project2/comment.1453 创建一个通知控制器,它获取项目2和更改类型注释及其id1453。因此,理论上我想重定向到projects2,并突出显示该页面上id为1453的注释。问题是:重定向后,如何突出显
链接
。(例如,某事物已发生变化的通知。)project2/comment.1453
创建一个通知控制器,
它获取项目2
和更改类型注释
及其id1453
。因此,理论上我想重定向到projects2
,并突出显示该页面上id为1453的注释。问题是:重定向后,如何突出显示注释
notificationscontroller.rb(伪代码!)
在我的研究中,我遇到了主干网,看起来主干网路由器可以通过使用一个函数(突出显示注释)响应url来解决这个问题。但我没有任何脊梁骨方面的经验
我不确定这种功能的一般方法是什么。并希望避免走上错误的道路。如果你能帮我,那就太好了
编辑:有点像一个小问题:我不确定在
评论中使用哪个字符。1453
是#
更好的选择吗?(comment#1453
)在重定向后,除了在重定向到的页面上包含javascript之外,不能运行javascript
您想要的是将信息从这个请求传递到下一个(重定向的)请求
闪光灯是一种很好的方法。通常,您会将其用于短信:
redirect_to project, notice: "Project foo bar message"
或
没有任何东西可以阻止您在flash中使用其他标识符并将JSON存储在它们的内存中
flash[:highlight_ids] = "[12, 43, 472, 482]"
redirect_to project
然后在布局或其他地方将此flash消息提取到JavaScript:
var highlight_ids = <%= flash[:highlight_ids] %>;
var highlight_id=;
然后使用javascript魔术突出显示实际元素。可能的方法之一:
在会话中或直接在cookie中存储id(以及可能的对象类型,如果需要突出显示的不仅仅是注释)(show
action在伪代码中)
在项目中,控制器显示操作
def show
...
if cookies[:highlight_id] and cookies[:highlight_type]
@highlight_id = cookies[:highlight_id]
@highlight_type = cookies[:highlight_type]
cookies.delete[:highlight_id]
cookies.delete[:highlight_type]
end
在评论视图中
<div class="some_class <%= highlight(@comment, @highlight_id, @highlight_type %>" ...
我觉得这比把信息储存在饼干里更干净,所以我接受这个答案。谢谢
def show
project = Project.find(params[:project_id])
comment = Comment.find(params[:commment_id])
cookies[:highlight_id] = comment.id
cookies[:highlight_type] = 'Comment' # optionally
redirect_to project
end
def show
...
if cookies[:highlight_id] and cookies[:highlight_type]
@highlight_id = cookies[:highlight_id]
@highlight_type = cookies[:highlight_type]
cookies.delete[:highlight_id]
cookies.delete[:highlight_type]
end
<div class="some_class <%= highlight(@comment, @highlight_id, @highlight_type %>" ...
def highlight(object, object_id, object_type)
if object_id and object_type and object.is_a?(object_type.classify.constantize)
'highlighted'
end
end