1

Rails では:remote => true、Web アプリケーションをリモート呼び出しするように設定できます。.js.erb次に、 to changes 要素で応答できます。シナトラでこれを作成するにはどうすればよいですか? リソースでリモート削除を行い、成功した場合は Dom を更新し、そうでない場合はエラーをスローします。

4

1 に答える 1

5

Rails では:remote => true、ヘルパーを使用して設定するlink_toと、次の出力が得られます。

<a href="#yoururl" data-remote="true">Linktext</a>

このリンクは、rails.js次のような方法で確認できます。

$(document).on('click.remote', '[data-remote]', function() {
  $.ajax({
    url: $(this).attr('href'),
    type: $(this).data('method') || 'GET',
    // and so on...
  });
});

したがって、実際に行うことは、HTMLリンクをdata-remote="true"属性でマークし、 を介して処理することjsです。js.erb応答できるテンプレートは、DOM. (これは個人的には悪い考えだと思います)。

Sinatra でも、ほとんど同じことができます。たとえば、remoteクラスを使用してリンクをマークします (これにより、Rails が を介して使用するものよりも高速な js のルックアップが提供されます) [data-remote]

<a href="#yoururl" class="remote">Your Link Text</a>

次に、jQuery を介してリモート クラスを持つリンクをバインドします。Rails と同じように、リモート クラスを持つ要素から発生するクリック イベントのドキュメント全体を観察します。

$(document).on('click.remote', '.remote', function() {
  // a similar ajax call to the one rails uses
});

JSON次に、 insinatraおよびで応答しSinatra::JSONます。

get '/yoururl' do
  json :foo => 'bar'
end

そして、ajax 呼び出しの成功ハンドラーでデータを好きなように処理します。または、erb で記述されたスクリプトで応答することもできます (これは rails が で行うことです.js.erb):

get '/yoururl' do
  erb :"answer.js"
end
于 2013-02-18T13:38:52.527 に答える