jquery渲染部分只是一次,第二次不再渲染只显示前一个

时间:2013-03-03 09:01:54

标签: jquery ruby-on-rails views partial-views renderpartial

我要通过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]) %>");
   });

它第一次渲染局部但第二次它实际上不渲染部分。

不使用ajax就可以做到这一点。

2 个答案:

答案 0 :(得分:0)

要重新渲染屏幕上的任何内容,您需要重新加载它(或在javascript中重新创建它)给我,看起来您嵌入了静态HTML和脚本执行的操作。它呈现静态HTML。

答案 1 :(得分:0)

花了很多时间在我自己的解决方案之后,事情变得疯狂,因为代码混乱和更多的代码行。

对于嵌套表单,我将此作为解决方案,因为它也不需要控制器的交互。

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

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

还有一件事,我在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;
}