在 Rails 中使用 jQuery 重定向

redirect with jquery in rails

提问人:Nick Ginanto 提问时间:12/10/2012 最后编辑:Rahul gargNick Ginanto 更新时间:2/1/2014 访问量:1734

问:

我确定这很简单,我只是还没有掌握它......

我有一个很大的 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 文件不知道是什么,因为它是循环中的变量。questioneach

有没有办法将信息传递给 JS,以便我可以使用它来生成正确的路径?

根据 Rahul garg 的建议,实施的解决方案是创建一个 html5 data- 属性

<div id="question-<%= question.id%>" data-questionurl= '<%= question_path(question) %>'>

然后在 js 中做

window.location = this.getAttribute("data-questionurl");

我希望这个解决方案是良好的编码实践

jQuery Ruby-on-Rails Ruby-on-Rails-3 不显眼的javascript

评论


答:

2赞 Rahul garg 12/10/2012 #1

.erb 文件在呈现到页面时被处理一次。

所有路径帮助程序都可用,因此只有一次,除非您进行了单独的 ajax 调用,否则您无法从客户端调用 rails 帮助程序(或任何其他 rails 代码)。

因此,在这种情况下,您的选择是:

  • 将路径存储在 div 本身的某个位置,并在 js 函数中获取它。attr#question
  • 将路径存储在 js 数组/哈希中,维护它们并适当地使用它
  • 修改你的路由,让 questions_path as 而不是 on like 而不是 ,在这种情况下,你可以在你的 js 函数中添加查询参数 你自己 并将返回你collectionmember/question?id=5question/5/idquestions_path/question

评论

0赞 Nick Ginanto 12/10/2012
谢谢,我已经根据我们的建议编辑了使用已实施解决方案的问题