2013-03-03 103 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