提问人:Nick Ginanto 提问时间:12/10/2012 最后编辑:Rahul gargNick Ginanto 更新时间:2/1/2014 访问量:1734
在 Rails 中使用 jQuery 重定向
redirect with jquery in rails
问:
我确定这很简单,我只是还没有掌握它......
我有一个很大的 div,我希望用户单击它,它会将他单击的模型发送给它(就像在 SO 中一样,但单击问题 div 上的任意位置将重定向到该问题)
<% @questions.each do |question| %>
<div id="question-<%= question.id%>" >
.... question details here ... not important to the question
</div>
<% end %>
现在,在我为每个问题使用 so 之前,我将获得单击 div 时的适当 URL。on-click="window.location = '<%= question_path(question) %>'"
我想用jquery(在一个单独的文件中)来改变这一点
问题.js.erb:
$(function() {
$([id^="question-"]).bind("click", function() {
window.location = <%= question_path(question) %>
});
});
而这正是我的问题。JS 文件不知道是什么,因为它是循环中的变量。question
each
有没有办法将信息传递给 JS,以便我可以使用它来生成正确的路径?
根据 Rahul garg 的建议,实施的解决方案是创建一个 html5 data- 属性
<div id="question-<%= question.id%>" data-questionurl= '<%= question_path(question) %>'>
然后在 js 中做
window.location = this.getAttribute("data-questionurl");
我希望这个解决方案是良好的编码实践
答:
2赞
Rahul garg
12/10/2012
#1
.erb 文件在呈现到页面时被处理一次。
所有路径帮助程序都可用,因此只有一次,除非您进行了单独的 ajax 调用,否则您无法从客户端调用 rails 帮助程序(或任何其他 rails 代码)。
因此,在这种情况下,您的选择是:
- 将路径存储在 div 本身的某个位置,并在 js 函数中获取它。
attr
#question
- 将路径存储在 js 数组/哈希中,维护它们并适当地使用它
- 修改你的路由,让 questions_path as 而不是 on like 而不是 ,在这种情况下,你可以在你的 js 函数中添加查询参数 你自己 并将返回你
collection
member
/question?id=5
question/5/
id
questions_path
/question
评论
0赞
Nick Ginanto
12/10/2012
谢谢,我已经根据我们的建议编辑了使用已实施解决方案的问题
评论