0

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

我有一个大 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 = '<%= question_path(question) %>'"对每个问题使用 so 之前,我会在单击 div 时获得适当的 url。

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

问题.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");

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

4

1 回答 1

2

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

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

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

  • 将路径存储在div 本身的一些中并在 js 函数中获取它attr#question
  • 将路径存储在 js array/hash 中,维护它们并适当地使用它
  • 修改您的路线以使用 questions_pathcollection而不是 on memberlike/question?id=5而不是,在这种情况下,您可以在自己的 js 函数question/5/中添加查询参数并返回给您idquestions_path/question
于 2012-12-09T18:13:44.477 回答