0

Ruby On Rails で簡単なタスク マネージャーを実行するタスクが与えられました。私にとってはとても簡単ですが、1つの問題があります。すべてを「ajax化」する必要があり、データはJSONで渡す必要があります。

私が今これを行う方法。

index.html.erb について

これらのパラメーターを使用して簡単なフォームを作成しています。

<%= form_for(Task.new, remote: true, :html => {:'data-type' => 'json'}) do |f| %>

TasksController で:

class TasksController < ApplicationController

respond_to :json

def create
@project = Project.find(params[:task][:project_id])


if @task = @project.tasks.create!(name: params[:task][:name], description: params[:task][:description])
respond_with(@task)
else  
flash[:error] = 'error'  
end  

index.htm.erb の内部には次のものがあります。

$(document).ready(function(){
$("#new_task").bind('ajax:success', function(evt, data, status, xhr){


    var row = ('<tr id="task.id"><td>'+data.name+'</td>'+'<td>'+data.description+'</td>'+'<td>'+data.state+'</td>'+'<td><%= link_to "delete task", task_path(task.id), :method => "delete", remote:true, data: { confirm: "Are you sure?" } %></td></tr>');
    $(row).insertAfter("#tasks_table tr:first");

    slicer($("#total"));
    slicer($("#active"));

}); });

$("#new_task").bind("ajax:beforeSend", function(event,xhr,status){
    $(this)[0].reset();
});

そして、これがどのように機能するかについて説明したいと思います(私の個人的な考え)

remote: true を指定することで、控えめな Javascript、Rails 3 機能を介してサーバーの入力にデータを送信するようにフォームに指示しています。私の例では通常のハッシュを送信します。これは params[:task][:name] などですが、:html => {:'data-type' => 'json'}) を設定したため、JSON が返されることを期待しています) (これは正しい構文ですか?)。私の TasksController クラスには、respond_to :json があります。つまり、respond_with は、respond_with を実行しているオブジェクトに対して to_json を実行するのに十分なほどスマートであるため、データ型 json が指定されている場合、コントローラーはこれらの要求に json で応答します。

私はこれらすべての仮定で正しいですか?

問題は、js.erb と json.erb を使用できるかどうかです (はい?) json を返す必要がありますか?

4

1 に答える 1

0

たぶん、一歩後退するのが助けになります。

AJAX フォームでは、submit イベントは最初に JavaScript を通過し、ブラウザーをトリガーして POST '/data.json' を呼び出しません。

オプションを指定して Rails によって生成された HTML を見ると、remote: trueおそらく "onsubmit()" などのcallback. 「成功」または「エラー」イベントを処理するのも JavaScript です。これについては、jQuery のドキュメントが気に入っています: http://api.jquery.com/jQuery.ajax/

Backbone.js、Ember.js、または Angular などの JavaScript ライブラリを使用すると、フォーム送信のプロセス チェーンをさらに微調整できるため、あなたの質問もやや独断的です。

于 2013-05-23T15:02:25.060 に答える