启用了Rails app(3.2.8)和turbolinks(不确定相关的)。
link
。 (例如,某事发生变化的通知。)目前我打算像这样处理它:
创建链接,使其形式为:
project2/comment.1453
创建一个notifications controller,
,其中包含projects2
和更改类型comment
及其ID 1453
。所以理论上我想重定向到projects2
并在该页面上突出显示id为1453的评论。问题是:重定向后如何突出显示注释?
notificationscontroller.rb(伪代码!)
def show
project = Project.find(params[:project_id])
comment = Comment.find(params[:commment_id])
redirect_to project AND highlight!
end
在我的研究过程中,我遇到了Backbone,看起来Backbones路由器可以通过使用函数响应url来解决这个问题(注释的突出显示)。但我对Backbone没有任何经验。
我不确定这种功能的一般方法是什么。并希望避免走错路。如果能帮助我,那就太好了。
编辑:排序迷你问题:我不确定comment.1453
使用哪个字符#
是更好的选择? (comment#1453
)
答案 0 :(得分:5)
除了在您重定向到的网页上包含javascript之外,您无法在重定向后运行javascript。
您想要的是将此请求中的信息传输到下一个(重定向)请求。
闪光灯是一种很好的方法。通常你会用它来发短信:
redirect_to project, notice: "Project foo bar message"
或
flash[:notice] = "Project foo bar message"
redirect_to project
没有什么可以阻止您在闪存中使用其他标识符并将JSON存储在其中。
flash[:highlight_ids] = "[12, 43, 472, 482]"
redirect_to project
然后在您的布局或某处将此Flash消息提取到JavaScript:
var highlight_ids = <%= flash[:highlight_ids] %>;
然后用你的javascript魔术来突出显示实际的元素。
答案 1 :(得分:2)
可能的方法之一:
在会话中或直接在cookie中存储id(以及可能的对象类型,如果需要突出显示注释)(伪代码中的show
操作)
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
在项目控制器show
操作
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 %>" ...
其中highlight
是帮助者,如
def highlight(object, object_id, object_type)
if object_id and object_type and object.is_a?(object_type.classify.constantize)
'highlighted'
end
end