2011-04-30 42 views
5

這是我在我的erb.js文件....但它不工作:如何從rails 3中的erb.js輸出幫助程序?

1 //Update with a message 
    2 $('#follow-update').html("<%= follow_button(@question) %>") 

follow_button是一個幫手:

20 def follow_button(resource) 
21  
22  type = resource.class.name 
23  follow_status = current_user.following?(resource) 
24 
25  verb = "Follow" if follow_status == false 
26  verb = "Unfollow" if follow_status == true 
27 
28  content_tag(:div, :class => "follow-button") do 
29  link_to "#{verb} this #{type} ", follow_path(:followed_type => type, 
30             :followed_id => resource.id, 
31             :follow_verb => verb), 
32             :class => "button", 
33             :remote => true 
34  end 
35 end 
36 end 

助手單機工作正常,但我想讓它更新我的按鈕。也許有一種方法可以在不更換整個幫手的情況下更新文本?

+0

嗯......好吧我只是改變了按鈕文字,到目前爲止好...可能需要刪除這.... .... – Angela 2011-04-30 04:57:19

+0

nope,我確實需要它重新顯示助手,因爲邏輯需要再次運行.... – Angela 2011-04-30 05:01:40

回答

-1

對不起,我現在不能測試,但你注意到HTML安全或JavaScript轉義?

例如請嘗試附上您的follow_button(@question)raw()escape_javascript()

+0

這沒有工作.....我開始接近,我認爲 – Angela 2011-05-25 01:26:00

0

您需要escape_javascript

$('#follow-update').html("<%= raw(escape_javascript(follow_button(@question))) %>"); 

如果這不起作用,請參閱顯示返回阿賈克斯文本和HTML按鈕

0

你不能從一個js.erb文件,除非調用輔助方法您可以按照Using a Rails helper method within a javascript asset中的描述明確包含它。例如:

<% environment.context_class.instance_eval { include ApplicationHelper } %> 

而且你也應該注意逃離你的HTML。

3

創建一個只包含你的助手的部分。

例如: '/wherever/_follow_button.html.erb'

中,調用你的助手:

<%= follow_button(question) %> 

接下來,使用JS渲染。

$('#some-id').html("<%= escape_javascript(render('/wherever/follow_button', :question => @question)) %>"); 

有一些方法可以提高效率,但希望這對現在有幫助。