0

私は100%動作するremote_formを持っています

ユーザーが送信をクリックすると、データベースからデータまたは別の Web サイトからスクレイピングされたデータが取得され、ページがシームレスに更新されます...

私が今抱えている問題は、同じことをしたいのですが、ユーザーが onload イベントで送信ボタンをクリックすることなく実行したいということです。私はそれについて間違った方法で行っていると思います:

技術的にはこれは機能します...正しいデータを取得しますが、remote_form_tagが行うことを正確に行う代わりに、生のデータを返します。RJS replace_html はありません。

form_for を完全にスキップして、ページの読み込み時にコントローラ アクションを直接実行する方法はありますか?

<script type="text/javascript">
    $(window).load(function() {
        // executes when HTML-Document is loaded and DOM is ready
        // jQuery.facebox('Big loading! <img alt=\"Loading\" src=\"/images/loaders/loading.gif\" />');
        //$("#update_form").submit();
        $("#update_form").submit(function () { return false; });

    });
</script>

のフォーム

#html.erb
<%  form_remote_tag :url => { :action => "update_availables", :id => params[:id] },
    :loading => "jQuery.facebox('Big loading! <img alt=\"Loading\" src=\"/images/loaders/loading.gif\" />');",
    :html => { :method => "get" },
    :method => "get",
    :html => { :id => 'update_form' } do %>

コントローラー

  def update_availables
    @do_it = Available.get_new_availables :id => params[:id], :date => user_cart.getDate.to_s
    get_availables

    respond_to do |format|
      format.html
      format.js
    end
  end

RJS

page.replace_html :rooms, :partial => "available"
page << "jQuery.facebox.close();"
4

2 に答える 2

4

ユーザーがフォームをクリックするのと同じ機能を得るには、javascriptclickメソッドを使用できます。

$(window).load(function() {

    $("#update_form input[type='submit']").click();

});

しかし、ユーザーからの入力なしで送信している場合、データをフォームに入れるのはなぜですか?アクションを呼び出してコードを直接更新するロードハンドラーに ajax 呼び出しを入れないのはなぜですか?

$(window).load(function() {

    $.ajax({
      type: "GET",
      url: "scraper_url",
      data: {field1:val,field2:val},
      success: function(responseText){
        // update page
      }
    });

});
于 2010-01-15T05:27:56.833 に答える
1

私はここでフロイドに同意します。私が通常このタイプのことに取り組む方法は、RJSを使用してページを更新するのではなく、Railsアクションから必要なJSONデータを返すことです。これには、JSONの生成が通常非常に高速であり、メソッドとしてモデルに簡単に移動して、to_jsonさまざまなコンテキストで再利用できるという利点があります。

ページの更新が単純な場合、このようにインラインで実行できない理由はありませんが、より複雑な場合は、静的javascriptファイルの関数として定義できます。このアプローチの良いところは、JavaScriptとRubyのコードをよりモジュール化して分離した状態に保つことです。限られたRJSメソッドによって漏れのある「抽象化」(難読化のように)されるのではなく、javascriptコードが独立しているため、デバッグと単体テストが簡単になります。また、静的なjavascriptファイルのキャッシュからもパフォーマンス上の利点が得られます。

Webを見てみると、最近RailsのブログでRJSについてあまり言及されていないことに気付くでしょう。これは、RJSが2006年にホットなアイデアでしたが、JavaScriptのベストプラクティスが進化するにつれて使用されなくなったためです。これを理解するには、AJAXの歴史を見る必要があります。Railsは、2005年に組み込みのAJAXサポートを備えた最初のフレームワークの1つであり、Prototypeを使用してこれを行いました。これは、実際には最初の最新のJavascriptフレームワークでしたが、まだ端がかなり荒いものでした。当時、非常に多くのWeb開発者が、DOMの非互換性のために不当にひどい評判を持っていたJavascriptを回避する方法を探していました。したがって、人々はRailsヘルパーを使ってすべてを紙に書くことに少し熱心でした。これは、人々が非常に単純なAJAXに驚いたときに素晴らしかったです。しかし、Javascriptフレームワークが成熟し、人々がJavascript機能に意欲的になるにつれて、Javascriptは一級市民に値することが明らかになりました。現在、jQueryは一般的なjavascriptタスクを非常に簡潔でエレガントにしているため、初期のRailsヘルパーはデフォルトの機能が機能していても不器用に見えます。RJSの良い使用例はまだいくつかあると思いますが、私はそれを何年も使用しておらず、まったく見逃していません。

私のアドバイスは、Javascriptを採用することです。Douglas CrockfordによるJavascript:The Good Partsを入手してから、jQueryで多くの時間を費やしてください。あなたは十分に報われるでしょう。

于 2010-01-15T06:37:41.623 に答える