2012-09-11 67 views
2

更新:我剛剛發現這個其他線程,解釋了爲什麼我遇到此問題(Pass local rails variable to javascript to partial),但未列出步驟修復它(或者至少它跳過了太多我還不知道該怎麼做的步驟)。問題似乎是,傳遞給局部變量的局部變量不再是new.html時存在的局部變量.erb被加載,因爲部分直到click事件才被加載。有可能解決這個問題嗎?謝謝。將局部變量傳遞給視圖已經加載後呈現的局部

原文:

我綁一個鏈接,只能在某些時候click事件,我不知道爲什麼。當單擊鏈接而不重新加載頁面時,它應該呈現給我的視圖。

這是我現在有(沒有工作):

comps_helper.rb:

def addRound(f) 
    render "add_round", f: f 
end 

譜曲/ new.html.erb

<div id="add_round"></div> 
<%= link_to "Add round", addRoundLink_path, remote: true %> 

addRoundLink.js。 erb

$("#add_round").html("<%=j addRound(f) %>"); 

什麼不工作:

  1. 如果我直接從new.html.erb調用輔助方法與<%= addRound%>,它的工作原理。但我需要在點擊鏈接時觸發它,以便用戶可以根據需要添加儘可能多的部分。

  2. 如果'f'參數未包含在上面的代碼中,那麼javascript在單擊時會起作用。例如,如果我更改了部分,所以它只包含一個文本字符串,它將在單擊鏈接時呈現該文本。這讓我覺得我在javascript中包含了'f'參數是個問題。但我不確定爲什麼會出現這種情況,因爲不是JavaScript,只是將該代碼插入到new.html.erb中,並在其中添加了「add_round」id的div。

注:這是我在我的JavaScript控制檯,當我點擊鏈接: GET HTTP //0.0.0.0:3000/addRoundLink 500(內部服務器錯誤)
的jquery.js:8215

謝謝。

回答

3

它不工作,因爲f只存在於您的控制器操作的上下文中。

當用戶點擊您的鏈接時,會爲您的JavaScript創建一個新的HTTP請求。處理此請求的控制器操作與呈現頁面的控制器操作不同,因此您需要在此控制器操作中設置f並將其作爲本地傳遞給addRoundLink.js.erb。

示例代碼

  • 我假設f是你的模型對象/實例確定。

在你的控制器

def add_round 
     model = MyModel.find params[:id] 
     f = model.determine_f 

     render :partial => 'add_round', :locals => { :f => f } 
    end 

在你new.html.erb

<%= link_to "Add Round", add_round_path(@model), :remote => true %> 
+0

感謝。這就說得通了。然而,局部變量'f'實際上只是表單生成器的一部分,部分只包含表單的其他部分(所以我不認爲'f'是由我的模型對象/實例確定的,它?)我應該更具體。無論如何要通過這個變量? – Josh

+1

鏈接中的答案可能會對您有所幫助。你可以將你的模型傳遞給partial,並在你的partial中使用form_for來獲得FormBuilder對象,或者你可以在控制器中實例化一個,然後傳入它。http://stackoverflow.com/questions/371147/rails-ajax-my -partial-需求-A-formbuilder實例 – zeikt