переменное / динамическое содержимое меняется в зависимости от <div>- почему? - PullRequest
0 голосов
/ 15 августа 2011

У меня неожиданное поведение в части, которая отображается 9 раз в users / show.html.erb. (Посетите www.nowdoing.com / users / 2 , чтобы увидеть, что я имею в виду.) Вот соответствующая часть частичного (это многословно для целей отладки):

<%= "object 1 = #{object.content}" %>

<div id="float_have" style="display:none;"> 
   <%= "object 2 = #{object.content}" %>
   <%= render :partial => 'nowposts/floatpost', :locals => { :object => object.content } %>  
</div>

<%= "object 3 = #{object.content}" %>

<a href="#float_have" rel="facebox">Have!</a> | 

В поле №1:: object => "#nowreading book"

В рамке № 2:: object => "#nowlistening song"

Несмотря на это, я вижу следующее, когда загружаю свою веб-страницу:

 object 1 = "#nowreading book"
 object 2 = "#nowreading book"
 object 3 = "#nowreading book"

Это имеет смысл для коробки № 1. Но следующее поле НЕ имеет смысла для блока № 2:

 object 1 = "#nowlistening song"
 object 2 = "#nowreading book"        *** this is wrong
 object 3 = "#nowlistening song"

Может кто-нибудь объяснить мне, почему включение «# {object.content}» в DIV-файл facebox приводит к изменению содержимого? Я считаю это поведение очень своеобразным. Ваша помощь очень ценится!

--- РЕДАКТИРОВАТЬ ---

В users / show.html.erb:

            <%= render :partial => 'nowposts/nowpost',
                       :locals => {:object => @nowreading,
                                   :object_link => @reading_link,
                                   :object_mode => "reading",
                                   :doing_img => @reading_img,
                                   :doing_url => @reading_url_text
                                    } %>

            <%= render :partial => 'nowposts/nowpost',
                       :locals => {:object => @nowlistening,
                                   :object_link => @listening_link,
                                   :object_mode => "listening",
                                   :doing_img => @listening_img,
                                   :doing_url => @listening_url_text
                                    } %>

In nowposts / _nowpost.html.erb:

        <div class ="status bl br">
            Fresh on <%= object.updated_at.strftime("%b %d, %Y") %><br \>
            <% if user_signed_in? %> 
 <%= "object 1 = #{object.content}" %>
                <div id="float_have" style="display:none;"> 
                    <%= "object 2 = #{object.content}" %>
                    <%= render :partial => 'nowposts/floatpost', :locals => { :object => object.content } %>  

                </div>

                <div id="float_wanna" style="display:none;"> 
                    <%= "object 3 = #{object.content}" %>
                    <%= render :partial => 'wishlists/floatpost', :locals => { :object => object.content } %>  

                </div>  
                <a href="#float_have" rel="facebox">Have!</a> | 
                <a href="#float_wanna" rel="facebox">Wanna!</a> 

            <% end %>
        </div>

В application.html.erb:

    <script type="text/javascript">
        jQuery(document).ready(function($) {
          $('a[rel*=facebox]').facebox({
            loadingImage : '../images/loading.gif',
            closeImage   : '../images/closelabel.png'
          })
        })
      </script>     

Частичные nowposts / _floatpoast.html.erb

    <h2>Wanna!</h2>
    <h3>You wanna do this?  Great, put it on your bucket list. </h3>

    <%= form_for(:wishlist, :as => @wishlist, :url => {:controller => "wishlists", :action => "create", :user_id => current_user } ) do |f| %>

    <p><%= f.label :content %><br />
    <%= f.text_field :content, :value => object, :size => "80" %></p>

      <p><%= f.submit "Post!" %></p>
    <% end %>

Как упоминалось в моем комментарии ниже, этот код работал в моем последнем коммите (несколько дней назад), до того как я реализовал кэширование результата API и этих вложенных маршрутов:

resources :users 
  resources :nowposts, :only => [:have_create, :create, :new, :show]
end

Но я не думаю, что это проблема. Я только что провел другой тест, и object.content изменяется только тогда, когда он у меня внутри этого div:

  <div id="float_have" style="display:none;">

Я попробовал другой случайный div:

  <div id="status">
     <%= "object 2 = #{object.content}" %>
  </div>

и это отображается правильно. Это заставляет меня думать, что проблема в скрипте Facebox? Но если это так, мне интересно, почему это сработало несколько дней назад.

Дайте мне знать, если вам нужно что-нибудь еще.

1 Ответ

0 голосов
/ 15 августа 2011

Я совсем не понимаю ваш код, он слишком двусмысленный. 'object' - довольно ужасное имя для переменной, а content - действительно плохое имя для атрибута. Кроме того, ваши местные жители для рендеринга здесь не имеют особого смысла ({: object => object.content} ????). Если вам нужна помощь, попробуйте уточнить, что это значит.

При этом вы можете изменить каждый оператор отладки с

<%= "object 1 = #{object.content}" %>

до

<%= "object 1 = #{object.inspect}" %>
<%= "object 1 content = #{object.content.inspect}" %>

и отобразить результаты.

...