0

次のように、divタグ内に単純なテキストがあります。

<div id="text">Value 
<a href="/actual/link/incase/user/has/JS/turned/off" id="change_value"/>
</div>

次に、このjavascriptを持っています

$('change_value').observe('click', function(event){
  $("text").update("something here!");
  event.stop(); // Prevent link from following through to its given href
});

そして、これはすべて素晴らしいです。ただし、2 つの質問があります (1 つ目は私の主な問題です)。

  1. div を「ここにあるもの」で更新する代わりに、フォーム要素、つまりフォームタグ、ラベル、テキストボックス、および変更を「送信」するボタンで更新するようにするにはどうすればよいですか。アイデアは、ユーザーがこのフィールドをページ上で編集できるようにすることです。

  2. 実際にJSをどこに配置すればよいですか。私は現在、それをapplication.jsに持っていて、window.onLoadで関数を実行しています...それが唯一の方法ですか? そうでなければ、それは要素を見つけることができないので、そうではないと思います!

皆さんありがとう!

4

2 に答える 2

0

質問 1: 必要なコントローラー/アクションに対して AJAX 呼び出しを行うことができます。コントローラーは探しているオブジェクトを取得し、js.erb テンプレートを送信します。js.erb テンプレートは次のようになります。

$('#change_value').update('<%= render :partial => @object %>');

次に、そのオブジェクト タイプのパーシャルには、必要なフォームが含まれます。このアプローチについては、Railscasts のさまざまなエピソードで詳しく説明しています。エピソード 136 にはこれの良い例がありますが、jQuery を使用しているため、Prototype 構文に適応させる必要があります (ただし、jQuery を試したことがない場合は、試してみることをお勧めします)。エピソード 235 には、UJS に関する多くの優れた情報が含まれており、jQuery と Prototype の両方の例が示されています。

質問 2: いいえ、application.js に入れる必要はありません。そのリソースに固有の別の js ファイルを作成し、そのリソースのレイアウトに含めることができます。そのリソースがレイアウトを使用していない場合でも、それをビューに含めることができると思います。

于 2010-11-01T21:33:52.923 に答える
0

あなたの最善の選択肢は、レールキャスト #196 と #197 を見ることだと思います:

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

これらのキャストは、(3 レベルの) 形式でネストされたモデルを作成する方法を説明します。パート 2 は、追加や削除などのアクションの JavaScript 部分に集中しています。

良い視聴。

于 2010-11-01T14:13:57.363 に答える