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) %>'"ここで、質問ごとに使用する前に、div がクリックされたときに適切な URL を取得します。

これをjqueryで変更したい(別ファイル)

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

このソリューションが良いコーディングの実践になることを願っています

4

1 に答える 1

2

.erbファイルは、ページにレンダリングされるときに1回処理されます。

すべてのパスヘルパーが利用できるので、一度だけ、別のajax呼び出しを行わない限り、クライアント側からRailsヘルパー(または他のRailsコード)を呼び出すことはできません。

したがって、この場合のオプションは次のとおりです。

  • パスをdiv自体attrの一部に#question保存し、js関数でフェッチします。
  • パスをjs配列/ハッシュに保存し、それらを維持して適切に使用します
  • ルートを変更してcollection、onの代わりにの代わりにmemberquestions_path/question?id=5を使用しquestion/5/ます。その場合id、js関数にクエリパラメータを追加して、自分でquestions_path返すことができます。/question
于 2012-12-09T18:13:44.477 に答える