【问题标题】:redirect with jquery in rails在rails中使用jquery重定向
【发布时间】:2012-11-27 05:26:29
【问题描述】:

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

我有一个大 div,我希望用户点击它,它会将他点击的模型发送给它(就像在 SO 中一样,但点击问题 div 上的任何地方都会重定向到问题)

<% @questions.each do |question| %>
<div id="question-<%= question.id%>" >
.... question details here ... not important to the question
</div>
<% end %>

现在,在我使用 on-click="window.location = '&lt;%= question_path(question) %&gt;'" 之前,对于每个问题,我都会在单击 div 时获得相应的 url。

我想用 jquery 改变它(在一个单独的文件中)

question.js.erb:

$(function() {
    $([id^="question-"]).bind("click", function() {
      window.location = <%= question_path(question) %>
    });
});

这正是我的问题.. JS 文件不知道question 是什么,因为它是each 循环中的一个变量。

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

在 Rahul garg 的建议下实施的解决方案是制作一个 html5 数据属性

<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 unobtrusive-javascript


    【解决方案1】:

    .erb 文件在渲染到页面时被处理一次。

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

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

    • #question div 本身中存储一些attr 中的路径,并在js 函数中获取它。
    • 将路径存储在js数组/hash中,维护并合理使用
    • 修改你的路由以将 questions_path 设置为collection 而不是member 就像/question?id=5 而不是question/5/,在这种情况下,你可以在你的js函数中添加查询参数idquestions_path会回复你/question

    【讨论】:

    • 谢谢,我已经根据我们的建议使用实施的解决方案编辑了问题
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多