3

Ruby on Rails 3.2.2 と jQuery-Rails 2.0.2 gem (jQuery UI を含む) を使用しています。フロントエンド コンテンツにある「新しいコメント」リンクをクリックすると、jQuery UI ダイアログウィンドウが開きます。ダイアログ ウィンドウが開いているときは、コントローラー アクションに対して AJAX HTTP 要求が実行され、モーダル ウィンドウのボディ コンテンツを HTML フォームでレンダリングして "入力" します。

フォームが正常に送信された後、フロントエンドのコンテンツが次のように変更されるように、ビューを実装したいと思います。トリガー リンク テキストは、フォーム「新しいコメント」から「編集コメント」に変更されます。

どうすればそれを作ることができますか?何についてアドバイスしますか?


: フォームは、AJAX HTTP 要求を実行することによって順番に送信されます。

4

1 に答える 1

0

それはすべて、そのフォームをサーバーに送信する方法によって異なります。

送信するフォームに:remote => true属性が設定されている場合、AJAX 呼び出しを介してサーバーに送信され、サーバーはそれを通常の非 ajax フォーム リクエストと区別することができます。

respond_to do |format|
  format.js  #this renders the <actionname>.js.erb file and executes it on the client
end

jquery_ujs ヘルパーは、サーバーから返された JavaScript コードを実行します。

次のような任意の JavaScript コードを<actionname>.js.erbファイルに記述できます。

$('#trigger_link').text('edit comment');

リモート フォームを使用せずに通常の$.ajax呼び出しを行う場合は、jQuery が提供するコールバックに単純にフックできますがsuccess、それは明らかだと思います。

アップデート:

問題は、ダイアログを開くきっかけとなったリンクがわからないことです。

通常、どこかにダイアログを開く jQuery 関数があります。トリガー リンクを含む最初のリストをレンダリングするとき、それらをページ上の他のリンクと区別する何らかの方法があると仮定します (おそらく のような css クラスを介して.trigger)。

その後、次のことができます。

$('.trigger').click(function() {
  window.trigger_link = this;
});

上記の小さなスニペットは、ポップアップを開く既存のクリック イベント ハンドラーを上書きしないことに注意してください。それも実行されます。

これで、ウィンドウを開いたリンクを追跡できるようになりました (トリガー リンクをクリックするとウィンドウが開き、最後にクリックされたトリガー リンクが常に保存されます)。フォームが送信されたら、次の操作を実行できます。

$(window.trigger_link).text('edit comment');

window.trigger_link は正しいリンクを参照しているためです。

于 2012-09-12T13:20:01.810 に答える