2014-10-31 3 views
0

Привет, я начал использовать Ruby on Rails всего неделю назад и все еще довольно новичок, поэтому, если кто-нибудь сможет помочь мне решить эту проблему, я бы очень признателен, это личный проект, m работает над не школьной работой. Поэтому проблема заключается в том, что я пытаюсь щелкнуть одно из изображений аниме из моей jcarousel на моей странице html и отобразить его описание в отдельном div (id = content) в теге p, используя вспомогательные методы, перечисленные ниже, но его не работает должным образом он всегда показывает, что последнее описание аниме из моей базы данных может кому-нибудь помочь?Ruby On Rails с использованием вспомогательных методов в link_to

Мой помощник Методы

module HomepageHelper 
attr_accessor :info 
def getDescription(des) 
    @info = des 
end 
def setDescription() 
    content_tag(:p, @info) 
end 
end 

Мой HTML страница

<!DOCTYPE html> 
<html> 
<head>, 
    <%= stylesheet_link_tag "application", media:"all", "data-turbolinks-track" => true %> 
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 
    <%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"%> 
    <title>Anime Shuffle</title> 
</head> 
<body> 
    <%= yield %> 
    <div class="container"> 
     <div class="header"> 
      <h1>Anime Shuffle</h1> 

       <ul id="navigator"> 
       <li><a href="home.html">Home</a></li> 
       <li><a href="video.html">Videos</a></li> 
       <li><a href="about.html">List</a></li> 
       </ul> 
     </div> 

     <div class="ContentSearch"> 
      <ul id="search"> 

       <li><input type="text" name="query" value="Search"></input></a></li> 
       <li><a href="home.html">Popular</a></li> 
       <li><a href="videos.html">New</a></li> 
       <li><a href="anime_list.html">Shuffle</a></li> 

      </ul> 

     </div> 

     <div class='jcarousel'> 

      <ul id='carousel_ul'> 
        <% @animes.each do |anime| %> 
         <li> 
          <%= link_to image_tag(anime.img_src,:data => {:description => anime.aname, :title => anime.aname}),'getDescription(anime.description)' %> 

          <figcaption> 
           <%= anime.aname %> 
          </figcaption> 

         </li> 

        <% end %> 


      </ul> 
      <div id="left1" class="left" data-jcarouselcontrol="true"><div class="arrow-left"> </div> 
      </div> 
      <div id="right1"class="right" data-jcarouselcontrol="true"><div class="arrow-right"></div> 
      </div> 
     </div> 

     <div class="content"> 
       <div id="Rating"> 
        <p>0.0</p> 
        <div id="episode-title"> 
         <p>Episode List</p> 
        </div> 
        <div id= "episodes-list"> 
         <li><p>Episode<p>1<p>-<p>Upload Date</p></p></p></li> 
        </div> 

       </div> 
       <div id ="info"> 
        <p>Synposis</p> 
        <div id = "info-content"> 
         <p><%= setDescription %></p> 
         <div id="tags"> 
          <li><p>Tags: <p>something, somthing, something, something</p></p></li> 
         </div> 
        </div> 

       </div> 
       <div id="Review"> 
        <p>Review</p> 
        <div id= "Review-content"> 
         <p>Ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut?</p> 
        </div> 
       </div> 
       </div> 
     </div> 



    </div> 
    <div class="footer"> 
     <div id='footer-container'> 
      <p>Powered by Net</p> 
     </div> 
    <div> 

</body> 

Javascript

var id = ""; 

setInterval(function() { 

    var left1 = parseInt($('#carousel_ul').css('left')); 

    if ($('#left1').is(":hover")) { 
     $('#carousel_ul').css('left', left1+1.5); 
     if(left1> 150) 
     { 
      $('#carousel_ul li:last').insertBefore($('#carousel_ul li:first')) 
      $('#carousel_ul').css('left', 0); 
     } 
    } 
    else if ($('#right1').is(":hover")) { 
     $('#carousel_ul').css('left', left1-1.5); 
     if(left1 < -150) 
     { 
      $('#carousel_ul li:first').insertAfter($('#carousel_ul li:last')) 
      $('#carousel_ul').css('left', 0); 
     } 
    } 
    },10); 
    $(document).ready(function() { 
     setInterval(); 
    }); 
+0

Попробуйте написать Javascript для ссылки 'onclick' и вызвать метод' setdescription' для каждой ссылки динамически – Gowri

+0

в вашей link_to кажется, что вы вызываете getDescription (anime.description) внутри кавычек. Это действительно называется? Думаю, вы не должны использовать кавычки! –

+0

Я возился с ним, пытаясь разными вещами, он не работает – mav191

ответ

0

Проблема в том, что @info - это переменная экземпляра, поэтому она создается один раз, когда страница загружается. Теперь, поскольку у вас есть цикл для печати карусели, вы повторно вызываете метод 'getDescription', каждый раз переопределяя переменную @info. Когда вы, наконец, попытаетесь использовать его значение с setDescription, конечно, вы получите последнее описание.

Проблема заключается в том, что вы генерируете один единственный «контент» div на сервере-время с последним описанием. Вместо этого вы должны генерировать один для каждого аниме (с циклом, как в карусели), показывая правильный щелчок по изображению.

Без кода JavaScript трудно помочь вам больше, чем это.

EDIT

Ok, после того, как некоторые комментарии, может быть, я понял, что вы немного запутался. Проблема заключается в том, что вы смешиваете клиентский и серверный код. Домашняя страницаHelper - это помощник Rails, так что код просто работает на стороне сервера, и вы не можете ссылаться на него с javascript, вы можете использовать его только для создания представления. Итак, сначала нам нужно будет обновить link_to тег в карусели, чтобы та ссылка управлять OnClick событие:

link_to image_tag(anime.img_src,:data => {:description => anime.aname, :title => anime.aname}), '#', 
    :onclick => 'setDetail("contentFor' + anime.id + '")' 

Где добавил событие OnClick к карусели изображениям, так что если вы нажмете на них вы вызовете функцию javascript setDetail передаете «contentForN» в качестве аргумента, где N будет меняться в зависимости от anime id.

Следующий шаг, давайте реализуем эту новую функцию яваскрипта (я предполагаю, что вы используете JQuery):

var current = null; 

var setDetail = function (divId) { 
    if (current != null) { 
     $("#"+current).css("visibility", "hidden"); 
     $("#"+current).css("height", 0); 
    } 
    $("#"+divId).css("visibility", "visible"); 
    $("#"+divId).css("height", auto); 
} 

Наконец, вы должны напечатать «содержание» ДИВ для каждого аниме:

<% @animes.each do |anime| %> 
    <div id="contentFor<%= anime.id %>" class="content" style="visibility: hidden; height: 0"> 
      <div id="Rating"> 
       <p>0.0</p> 
       <div id="episode-title"> 
        <p>Episode List</p> 
       </div> 
       <div id= "episodes-list"> 
        <li><p>Episode<p>1<p>-<p>Upload Date</p></p></p></li> 
       </div> 

      </div> 
      <div id ="info"> 
       <p>Synposis</p> 
       <div id = "info-content"> 
        <p><%= anime.description %></p> 
        <div id="tags"> 
         <li><p>Tags: <p>something, somthing, something, something</p></p></li> 
        </div> 
       </div> 

      </div> 
      <div id="Review"> 
       <p>Review</p> 
       <div id= "Review-content"> 
        <p>Ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut?</p> 
       </div> 
      </div> 
      </div> 
    </div> 
<% end %> 

Это должно работать, и вам больше не нужен помощник. Вы должны переместить встроенный css внутри стандартного css.

+0

Спасибо! отправил код сценария Java выше, если вы хотите взглянуть – mav191

+0

не знаете, как это сделать? – mav191

+0

У вас нет функции, управляющей щелчком в карусели. В javascript, который вы опубликовали, задается только интервал для карусели, но не событие onclick ... Как вы думаете, что описание может измениться при нажатии на изображение? Я думаю, вы немного смущены, позвольте мне немного времени, чтобы показать другой подход, хорошо :)? – iMacTia

Смежные вопросы