0

私は ab タグの内容を取得しようとしており、これを使用してヘルパー メソッドをクエリします。しかし、私はそれを行う方法を理解できません。誰か助けてください。

「クエリ」はヘルパー メソッドです。そして、b タグ内に含まれるテキストを渡す必要があります。ヘルプ..?

<div class="col span_1_of_7">
    <section id="feed">
        <div id ="infoFeed">
            <ul style="font: 10px sans-serif;text-align: justify;">
                <script>
                    $(document).click(function(){
                        <% query($("#tooltip b").text();) %>
                    });
                </script>
                <% Story.all.each do |story| %>
                    <li style="border-style:solid;border-top:thick double #000;">
                        <p><h4 style="text-align:left;"><%= link_to story.title, story.url, :target => "_blank" %></h4> 
                        <%= story.description %> <h7><br /><br /><%= story.source %><br /><%= story.date.to_date %></h7></p></li>
                <% end %>
            </ul>
        </div>
    </section>
    <script> $(function() { $('#infoFeed').vTicker();});</script>
</div>
4

1 に答える 1

2

あなたがしていることはエキサイティングかもしれませんが、それはクライアント - サーバー Web アプリケーションでは不可能です。

Web アプリケーションの基本を理解し、サーバー側のコードとクライアント側のコードを分ける線を理解する必要があります。

Ruby (Rails) - サーバー側: これは、HTML または JS または CSS を生成し、この HTML/JS/CSS がクライアント (ブラウザー) に送信されることを意味します。ブラウザでは、HTML が解析されて画面に描画されます。次に JavaScript コードが実行され、送信された HTML を使用して必要なことを実行します。この JavaScript は、サーバー上の Ruby コードに直接アクセスできません。

大丈夫。あなたが何をしたか見てみましょう。

$(document).click(function(){
  <% query($("#tooltip b").text();) %>
});

わかった。クリック ハンドラー内に ERB スクリプトレットを追加しましたdocument(なぜこれを行うのですか?)。わかりました、あなたの JavaScript エラーについて話すつもりはありません。ここでサーバーとクライアントの問題に対処しましょう。

これはあなたが期待することです:

Webページがロードされた後、 jQuery#tooltip bの機能を使用して内部のテキストが抽出され、Rubyヘルパーtextに渡されqueryて何かを実行します.

本当に起こること

このページが Rails によって生成されると (これはサーバーで発生し、JAVASCRIPT は実行されないことに注意してください。表示されるのは、Ruby を使用して埋め込まれたプレーン テキストだけです<% %>)、クエリ ヘルパーが呼び出され、その引数は this になります$("#tooltip b").text();。この JavaScript はサーバーでは実行されないと言いました。したがって、これはクエリに渡され、ruby は何が何であるかを知りません$("#tooltip b").text();。これは文字列ではないため (引用符で囲まれていないことを確認してください)、Ruby はおそらく構文エラーをスローします。

つまり、結論は!JQuery で内容を取得#tooltip bし、それを Ruby 関数に渡します。この JavaScript 自体が Ruby によって生成され、この HTML 応答が構築されてクライアントのブラウザー (Ruby ランタイムがない) に送信された後にのみ、JavaScript が実行されるため、これは発生しません。

お分かりできると良いのですが。これを読んでください: https://softwareengineering.stackexchange.com/questions/171203/what-are-the-difference-between-server-side-and-client-side-programming


大丈夫。それでは、どうやってこれを達成しますか。覚えて?Rubyコードに「直接」アクセスすることはできないと言いました。どうにかして間接的にできるということですか?はい!コメントで提案したように、Ajax を使用します。

メソッドの呼び出しに役立つアクションを作成する必要がありますquery。次に、作成したばかりのアクションに対応する URL に対して AJAX 呼び出しを実行し、結果を$("#tooltip b").text();データとして渡す必要があります。アクションで params ハッシュからこのデータを取得し、それをヘルパーに渡して処理を行います。必要に応じて、結果を js または json として返します。

手順:

  1. Rails でアクションを作成し、このアクションにアクセスするためのルートを追加します。
  2. アクション内で、クライアント側から送信されたデータをparamsハッシュから取得します。これを行う方法を知っていると思います。そして、それをクエリ ヘルパー メソッドに渡します。(これを機能させるには、コントローラーにヘルパー モジュールを含める必要があります)
  3. respond_to orを使用して、状況に応じてrender結果を返しjsonます。js

  4. クライアント側で、アクションの URL に ajax 呼び出しを追加し、データを渡します。成功のコールバックを追加すると、これはアクションから送信したものをすべて受け取ります。あなたがやりたいことをするためにそれを使ってください。

ウェブ上のリソースを参照してください。ここはチュートリアルを書く場所ではありません。

于 2013-10-27T14:16:51.203 に答える