2011-09-19 33 views
1

我已經提出這個問題,但我的方式我試圖做到這一點是可怕的,至少可以說。當某個參數在Ruby循環中完成時,我需要調用一個jQuery show()方法。我的想法是一個類似於這個例子的Javascript標籤。但由於某種原因,jQuery在這個JavaScript標記中不起作用。我想不出比現在正在嘗試做的更好的方式。jQuery doenst在javascript ruby​​標記中工作?

代碼:

<% @records.each do |record| %> 
      <% if record.task.project.name == "SKIP"%> 
      <%= javascript_tag :defer => 'defer' do -%> 
       $('.toil.).show(); 
      <% end -%> 
      <% else %> 
<%= javascript_tag :defer => 'defer' do -%> 
        $('.toil.).hide(); 
       <% end -%> 

這個環的作品和香港專業教育學院測試的。有沒有更好的方法來嘗試我想要的?如果有名稱跳過的項目,則需要顯示一個類...如果沒有,則需要隱藏它。看似簡單卻複雜......

回答

1

你不能真正解釋什麼需要隱藏或顯示的性質,所以有很多方法可以解決這個問題。

如果它是每個記錄HTML的一個部分,只是不要在循環使它:

<% @records.each do |record| %> 
    <% if record.task.project.name != "SKIP"%> 
    All the HTML 
    <% end %> 
<% end %> 

如果它的東西,你仍然需要看到後來渲染,因爲它可能會成爲,設置一個類:

<% @records.each do |record| %> 
    <% skipIt = record.task.project.name == "SKIP" ? "display: none;" : "" %> 
    <span style="<%= skipIt %>"> 
     All the HTML 
    </span> 
    <% end %> 
<% end %> 

如果它只是一個標誌,供以後使用:

<% skipIt = false %> 
<% @records.each do |record| %> 
    <% skipIt = true if record.task.project.name == "SKIP" %> 
    All the HTML 
    <% end %> 
<% end %> 
... 
$(function() { 
    <% if skipIt %> 
    $(".toil").hide(); 
    <% end %> 
}); 

等等很多方面。取決於你真正需要的,我們不知道的。

(在大多數上面的例子中,功能也許應該被移動到一個部分或至少一個幫手。)

+1

我試圖做的是顯示錶格的幾行,如果這些表格單元格中有數據,則這些表格由以SKIP作爲名稱的記錄填充。因此,如果沒有記錄而不是這些行,則不需要顯示,因此它們被隱藏起來。 – SD1990

+0

然後,第一個 - 爲什麼要使用JavaScript來隱藏不需要首先渲染的內容? –

+1

他們確實需要渲染,因爲值可能不存在,但用戶可以輸入它們,所以字段需要在那裏。有一個用戶用來顯示/隱藏字段的Jquery切換按鈕。 – SD1990

0

首先,有一個錯字有:

$('.toil.).show(); 

你缺少在選擇結束一個單引號。

他們應該例如:

$('.toil').show(); 

,將顯示所有名爲「辛勞」 CSS類的元素。 Javascript和jQuery與HTML和CSS一起工作,我有這種感覺,你正試圖讀取或操作ruby標籤,而這是行不通的,因爲JS在數據到達瀏覽器時執行,所以ruby標籤已經被處理並轉換爲HTML,以防萬一:D

+0

是的遺憾,是一個只有問題的錯字,在我的代碼是正常的方式。你的第二部分很有趣,從未想到這一點。但是,如果ruby正在循環,並且它需要調用js,它會調用它?或者你是說瀏覽器調用它,因此即使ruby打開並打開它,它也不會運行? – SD1990

+2

@ spartan2417,Ruby在服務器上運行。 JavaScript在客戶端上運行。在你的JavaScript甚至在瀏覽器的眼中閃爍之前,所有的Ruby都已經消失了。 –

+1

正如@Dave Newton所說的那樣。當我開始從事這項業務時,爲了瞭解它,我一直認爲ruby,jsp和asp.net是「html生成器」,它們只是從瀏覽器發送的輸入中生成html的web服務。另一方面,javascript是一種在瀏覽器上運行的腳本語言,瀏覽器只能看到服務器產生了什麼,所以JS只能與HTML和CSS交互,不能看到ruby標籤,asp.net標籤,C#代碼或任何這樣的。 – vtortola