2012-08-07 44 views
0

我用HAML取代了我的ERB文件,這很好用。但是,我有一些複雜的JavaScript和Erb代碼,當轉換爲haml時會失敗。我知道繞過haml的「:plain」選項,但是當我使用下面的代碼執行此操作時,erb代碼只是作爲文本打印出來,但未被解釋。你們有沒有解決辦法?HAML的複雜ERB替換在JS中失敗

ERB置換HAML在JS

- if (@active == "tasks") 
    :plain 
     $('#content_output').html("<div class='content_title task'></div><h3><%= I18n.t :task_all %></h3><%= escape_javascript(render('tasks/all_tasks', :tasks => @contact_tasks, :layout => 'normal')) %></div>"); 
     $('#content_input').html("<div class='content_title task'></div><h3><%= I18n.t :task_new_title %></h3><%= escape_javascript(render('tasks/new_task')) %></div>"); 
     $('a#tasks_tab').addClass('active'); 

失敗,這是原來的js.erb代碼:

<% if (@active == "tasks") %> 
     $('#content_output').html("<div class='content_title task'></div><h3><%= I18n.t :task_all %></h3><%= escape_javascript(render('tasks/all_tasks', :tasks => @contact_tasks, :layout => 'normal')) %></div>"); 
     $('#content_input').html("<div class='content_title task'></div><h3><%= I18n.t :task_new_title %></h3><%= escape_javascript(render('tasks/new_task')) %></div>"); 
     $('a#tasks_tab').addClass('active'); 
    <% end %> 

回答

1

假設你的文件擴展名js.haml的,我認爲所有你需要做的是改變你的<%= ... %>標籤標準的串插標籤#{ ... }

- if (@active == "tasks") 
    :plain 
    $('#content_output').html("<div class='content_title task'></div><h3>#{I18n.t :task_all}</h3>#{escape_javascript(render('tasks/all_tasks', :tasks => @contact_tasks, :layout => 'normal'))}</div>"); 
    $('#content_input').html("<div class='content_title task'></div><h3>#{I18n.t :task_new_title}</h3>#{escape_javascript(render('tasks/new_task'))}</div>"); 
    $('a#tasks_tab').addClass('active'); 
0

嘗試BTW在Rails 3中使用:javascript,而不是:plain

,你應該使用不顯眼的JavaScript(UJS)。退房一些教程:http://railscasts.com/episodes/205-unobtrusive-javascript

+0

當使用:javascript,沒有任何東西被執行,點擊標籤不會刷新內容,但用:明白它的確如此,除非它顯示「<%= %>」之間的所有內容爲純文本。 – John 2012-08-07 08:32:16

+0

哦,我剛剛注意到你已經在Javascript中嵌入了Ruby代碼。我想那裏沒有簡單的方法 - 你應該把它轉換成UJS。無論如何,這是最好的做法。 – 2012-08-07 08:58:21