2013-03-03 105 views
1

我必须追加部分由jquery为我的方案我不能渲染部分使用ajax,因为它需要控制器的交互,我受到限制不使用控制器。jquery渲染部分只是一次,第二次它不再渲染只显示前一个

所以我这样做

$('#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。

+1

你可以把东西放到一个隐藏的元素中,并在点击时显示和/或克隆它吗?对我来说,这不能工作,因为换行会弄乱JavaScript。 – JJJ 2013-03-03 09:04:34

+0

@Juhana我加了换行符,不是在我的代码中的问题:) – 2013-03-04 06:26:21

+0

是的,但我假设部分包含换行符(也许是引号)。 – JJJ 2013-03-04 17:21:10

回答

0

花费时间在我自己的解决方案上后,事情变得疯狂了,因为代码搞乱了,代码也更多了。

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

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

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

还有一件事,我加getRandomInt在jQuery来创造独特的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; 
} 
0

要重新渲染屏幕上的任何内容,您需要将它重新加载(或重新创建它在JavaScript中)给我看来,您似乎嵌入静态HTML和脚本做它的告诉。它呈现静态HTML。

+0

由于上面的代码描述了我每次渲染部分新值,所以它怎么会是静态页面。 – 2013-03-04 06:28:21

+1

我很肯定'@ locals.merge!(counter:cookies [:counter] + 1)'会在服务器上评估并输出为文字值。在你的浏览器中检查生成的HTML,你将能够看到是否是这种情况 – 2013-03-04 09:07:25

+0

是的,我也认为这是因为该cookie的价值并没有改变每次它呈现部分,我发现一个好办法做到这一点,而不是这种方式 – 2013-03-04 12:45:41