2016-04-26 112 views
0

所以<a class="buttonDone">行,我有一个id="<%= dom_id(item) %>"show.html.erb基本上是if-else condition的片段,因为某个项目的日期大于今天的日期,或者等于今天的日期,或者小于今天的日期。从Rails dom_id方法获取HTML类名?

的问题是,在我的update.js.erb,我想,以确保一旦达到一定的条件,我想补充一定的CSS类(即.complete)至<a class="notDue">overDuedueToday一行。

我知道我必须使用.addClass(.complete)方法来jQuery。因此,如果不修改所有<a class="notDue" or "overDue" or "dueToday">,我如何确保正确的类正在被修改,而不是其他的?

show.html.erb

<% if item.due_date > Date.today %> 
    <% if item.done? %> 
     <a class="complete"> 
     <%= item.due_date %> 
     </a> 
     <a class="linkResults"> 
     <%= link_to "#{item.task_title}", [@todolist, item], style: "font-weight: bold;" %><br/> <br/> 
     </a> 
    <% else %> 
     <div class="oneLine"> 
     <a class="notDue"> 
      <%= item.due_date %> 
     </a> 
     <a class="linkResults"> 
      <%= link_to "#{item.task_title}", [@todolist, item], style: "font-weight: bold;" %> 
     </a> 
     <a class="buttonDone" id="<%= dom_id(item) %>"> 
      <%= form_for([@todolist, item], remote: true, method: :put) do |f| %> 
       <%= f.hidden_field :done, value: '1' %> 
       <%= f.submit 'Mark Item as Done' %> 
      <% end %> 
     </a> 
     <br/><br/> 
     </div> 
    <% end %> 
    <% elsif item.due_date == Date.today %> 
    <% if item.done? %> 
     <a class="complete"> 
     <%= item.due_date %> 
     </a> 
     <a class="linkResults"> 
     <%= link_to "#{item.task_title}", [@todolist, item], style: "font-weight: bold;" %><br/> <br/> 
     </a> 
    <% else %> 
     <div class="oneLine"> 
     <a class="dueToday"> 
      <%= item.due_date %> 
     </a> 
     <a class="linkResults"> 
      <%= link_to "#{item.task_title}", [@todolist, item], style: "font-weight: bold;" %> 
     </a> 
     <a class="buttonDone" id="<%= dom_id(item) %>"> 
      <%= form_for([@todolist, item], remote: true, method: :put) do |f| %> 
       <%= f.hidden_field :done, value: '1' %> 
       <%= f.submit 'Mark Item as Done' %> 
      <% end %> 
     </a> 
     <br/><br/> 
     </div> 
    <% end %> 
    <% else %> 
    <% if item.done? %> 
     <a class="complete"> 
     <%= item.due_date %> 
     </a> 
     <a class="linkResults"> 
     <%= link_to "#{item.task_title}", [@todolist, item], style: "font-weight: bold;" %><br/> <br/> 
     </a> 
    <% else %> 
     <div class="oneLine"> 
     <a class="overdue"> 
      <%= item.due_date %> 
     </a> 
     <a class="linkResults"> 
      <%= link_to "#{item.task_title}", [@todolist, item], style: "font-weight: bold;" %> 
     </a> 
     <a class="buttonDone" id="<%= dom_id(item) %>"> 
      <%= form_for([@todolist, item], remote: true, method: :put) do |f| %> 
       <%= f.hidden_field :done, value: '1' %> 
       <%= f.submit 'Mark Item as Done' %> 
      <% end %> 
     </a> 
     <br/><br/> 
     </div> 
    <% end %> 
    <% end %> 

update.js.erb

$("#<%= dom_id(@todoitem) %>").hide(); 
alert("<%= dom_id(@todoitem) %>"); 

applications.css

.complete { 
    border-radius: 10px; 
    background: green; 
    padding: 3px; 
    width: 30px; 
    height: 30px; 

    color: white; 
} 
+0

我必须说我不完全了解你的问题(你可以尝试重新表达)?而且,作为旁注,我在模板中看到很多重复,我认为你应该熟悉[view partials](http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials)。 – BoraMa

+0

“@ todoitem”和“item”变量中有什么可以解释这两者之间的关系是什么 –

回答

0

可以使用辅助方法,并移动逻辑 if语句

def dateClass date 
if item.due_date > Date.today 
    return 'notDue' 
elsif item.due_date == Date.today 
    return 'dueToday' 
else 
    return 'overdue' 
end 

,并使用helper方法在你的模板

<a class='<%= dateClass(item.due_date) %>'> 
    <%= item.due_date %> 
</a> 

这可以让你的模板更短和更清洁的