2017-06-22 63 views
0

我想設置一個元素內容,以防它是空的。
html.erb代碼如下:工作jQwwery代碼不能在條件內工作

<div class="comments-section"> 
    <% if micropost.comments.any? %> 
    <ol id="comments_micropost-<%= micropost.id %>"> 
     <% micropost.comments.each do |comment| %> 
     <%= render comment %> 
     <% end %> 
    </ol> 
    <% end %> 
</div> 

元素我想設置內容爲<div class="comments-section">。當微博尚未發表評論時,其內容爲空。
我處理在create.js.erb的創建與JavaScript註釋行動:我寫了兩行代碼,這取決於micropost.comments是否是零或者不是零:

案例一:微柱還沒有評論(micropost.comments.any?是假的) :

$('#micropost-<%= @micropost.id %>').find('.comments-section').html("<%= escape_javascript(render partial: 'comments/first_comment') %>"); 

案例2:微柱已經評論(micropost.comments.any?爲true):

var comments = $('ol#comments_micropost-<%= @micropost.id %>'); 
comments.append('<%= escape_javascript(render partial: @comment) %>'); 

兩者的代碼段工作時分開使用。然而,當結合案例2在以下條件插入一組案例1的代碼不起作用:

if (comments == null) { 
    $('#micropost-<%= @micropost.id %>').find('.comments-section').html("<%= escape_javascript(render partial: 'comments/comments') %>"); 
} 
else { 
    comments.append('<%= escape_javascript(render partial: @comment) %>'); 
}; 

爲什麼當不執行if (comments == null)的代碼,我不明白。我也試過用if (comments == undefined)if (!comments)沒有任何改進。
而是,條件的else部分已成功執行。

+0

對於'comments.blank?'或'comments =='''也沒有改變。是'comments'來自'var comments':我如何表達等於0的長度? – Asarluhi

+1

@Asarluhi如果長度大於0,比可用。如果長度爲0,則不可用。 – Vishal

+0

即使'if(comments.length === null)'不起作用。我不知道爲什麼,上述解決方案之一應該在這一點上起作用。 – Asarluhi

回答

1

JavaScript中不存在的DOM元素被視爲length = 0的對象。可以通過使用Web瀏覽器控制檯,編寫DOM元素並檢查控制檯輸出來驗證這一點。選擇一個沒有評論的微博(例如id = 304微博):micropost.comments.any?將是錯誤的,並且div.comments-section內的所有內容都不會出現在文檔中。在基於鉻的瀏覽器在Firefox

  • Object { length: 0, prevObject: Object, context: HTMLDocument → 1, selector: "ol#comments_micropost-304" }
  • 原始

    1. []:在提示打開控制檯和寫入以下代碼:

      $('ol#comments_micropost-304'); 
      

      的輸出將是if聲明不起作用,因爲對象不爲空並且有length = 0。因此,如果聲明是正確的:if (comments.length == 0)