1

私のシナリオでは、jqueryで部分的に追加する必要があります。コントローラーの相互作用が必要であり、コントローラーを使用しないように制限されているため、ajaxを使用して部分的にレンダリングすることはできません。

だから私はこれをやっています

$('#button_add').click(function(){

  $('#content_form_div').append("
    <%= j render(:partial=> 'pages/content/call_text_phone',
:locals => @locals.merge!(counter: cookies[:counter] + 1 ),
 :formats=>[:html]) %>");
   });

1回目は部分的にレンダリングしますが、2回目は実際には部分的にレンダリングしません。

ajaxを使用せずにこれを行うためのアイデア。

4

2 に答える 2

0

画面上の何かを再レンダリングするには、それをリロードする(またはjavascriptで再作成する)必要があります。静的HTMLを埋め込んで、スクリプトが指示どおりに動作するように見えます。静的HTMLをレンダリングします。

于 2013-03-03T09:16:38.100 に答える
0

私自身の解決策に時間を費やした後、コードがめちゃくちゃになり、コードの行が増えるにつれて、事態はおかしくなりました。

ネストされたフォームの場合、コントローラーの対話も必要ないため、これを解決策として入手しました。

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

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

もう1つ、jqueryにgetRandomIntを追加して、時間差なしで即座に作成されたフィールドのタイムスタンプの重複を回避するために必要な一意のIDを作成しました。

function add_fields(link, association, content) {
 // I changed below line by adding getRandomInt method to assure unique id. 
  var new_id = new Date().getTime() + getRandomInt(1, 5000);
  var regexp = new RegExp("new_" + association, "g")
  $(".all_fields").append(content.replace(regexp, new_id));
}

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
于 2013-03-04T12:49:47.970 に答える