2013-05-29 36 views
1

我有紅寶石兩款車型之一,CoffeeScript的軌道選擇兩種模式

@photos = Photo.all 
@comments = Comment.all 
@objects = @photos + @comments 

我在我的HTML按鈕ID「僅-照片」和按鈕「只-意見」,如果我點擊第一個我只想選擇照片。 我該怎麼做才能從@objects中選擇@photos?在CoffeeScript中

這裏就是我想

<div id="list"> 
<% @objects.each do |l| %> 
    <% if l.class == "Photo"%> 
    <div id="photo" class="photo"> 
     <%= render "shared/photo", :photo => l %> 
    </div> 
... 
</div> 

<div id="filters"> 
<button id="only-photo"> 
</button> 
... 
</div> 

然後在CoffeeScript中我只是做:

$("#filters").on "click", "#only-photo", -> 
$("#list #comment").removeClass "active" 
    $("#list #photo").addClass "active" 

,但我相信有更優雅的方式做這些事情! 我們不能過濾從coffeescript範圍?或類似的東西?

謝謝!

+0

爲什麼要補充的兩個列表?爲什麼不僅維護兩者並分別顯示它們? –

+0

我不認爲你應該在這種情況下使用HTML ID,但類。 – MrYoshiji

+0

@MrYoshjii是的,你是對的,但仍然是同樣的問題!這對於用戶配置文件來說是一種「饋送」。但他可以選擇他想要的模型! –

回答

0

試試這個:

<div id="list"> 
<% @objects.each do |l| %> 
    <div id="<%= l.class.to_s.downcase %>_<%= l.id %>" class="<%= l.class.to_s.downcase =%>"> 
    <%= render "shared/#{l.class.to_s.downcase}", :photo => l %> 
    </div> 
<% end %> 
</div> 


<div id="filters"> 
    <button id="only-photo" class="filter" value="photo"> 
    </button> 
    <button id="only-comment" class="filter" value="comment"> 
    </button> 
    </button> 
</div> 

咖啡:

$("button.filter").on "click", -> 
    class_to_hide = $(this).attr('value') 
    $("."+class_to_hide).toggleClass('active') 
+0

感謝您的迴應! 但在這裏我得到這個: 未定義的方法'downcase'爲#

+0

我剛剛更新了我的答案(在'.downcase之前添加了'.to_s')@PaulGhorra – MrYoshiji

+0

謝謝!對不起,我不能投票的答案,我沒有足夠的聲譽... 其實它是工作,但你認爲這種方式與toggleClasse比隱藏和添加類更快?因爲我也在工作,這個更有效率嗎? –