2009-04-23 4 views
3

Привет всем! Эта проблема сводит меня с ума! Это похоже на ошибку в рендеринге JS от Rails, но я не уверен.Вложенная ошибка insert_html: Ruby On Rails & Javascript

Краткий синопсис:

Я пытаюсь создать релиз, в котором HAS_MANY дорожек. У этих TRACKS много TRACK_LINKS. Затем эти TRACK_LINK ассоциировали TRACK_LINK_TYPE (mp3, m3u, podcast, что угодно). Подумайте об этом, как о альбоме. Поэтому, добавляя релиз, вы можете добавлять треки альбома, и каждый трек альбома может иметь разные ссылки (mp3, m3u, podcast, что угодно). Я нахожусь на очень ранней стадии и использую строительные леса - пользователь может создать выпуск в форме, добавить треки через JS и добавить трековые ссылки через JS. Все это прекрасно работает, но добавление треков не работает, когда у меня есть функция «Добавить трек-ссылку» в коде! Он тихо терпит неудачу - нет ошибки, просто идет к # anchor.

В основной форме выпуска я визуализации СЛЕД частичной и добавьте ссылку, чтобы добавить Траектории:

<div id="tracks"> 
    <%= render :partial => 'track', :collection => @release.tracks -%> 
</div> 

<%= add_track -%> 

Теперь в СЛЕД частичной, я оказание TRACK_LINK частичной и добавить ссылку добавить TRACK_LINKs:

<div class="track"> 
    <fieldset> 
    <legend>Track</legend> 
    <p> 
     <% @track = track %> 
    <%= error_messages_for :track -%> 

     <% fields_for_track(track) do |track_form| -%> 
     Track Name 
    <br /> 
    <%= track_form.text_field :name -%> 
    <%= link_to_function "remove", "$(this).up('.track').remove()" -%> 
    <% track_links_id = "track_links_#{Time.now.to_i.to_s}" %> 
    <div id="<%= track_links_id %>"> 
      <%= render :partial => 'track_link', :collection => @track.track_links -%>    
    </div> 
    <%= add_track_link track_links_id -%> 
    <% end -%> 
    </p> 
</fieldset> 
</div> 

И в TRACK_LINK частичное, я создаю TRACK_LINK поля (со связанными с ними TRACK_LINK_TYPE поле):

<div class="track_link"> 
    <% @track_link = track_link -%> 
<% fields_for_track_link(track_link) do |track_link_form| -%> 
    Track Link 
    <br /> 
    <%= track_link_form.text_field :url -%> 
    <%= select ("track_link_type", "id", @track_link_type.map {|type| [type.name, type.id]}) -%>   
     <%= link_to_function "remove", "$(this).up('.track_link').remove()" -%>  
<% end -%> 
</div> 

Наконец, вот link_to_function вспомогательные методы:

module ReleasesHelper 
    def fields_for_track(track, &block) 
     prefix = track.new_record? ? 'new' : 'existing' 
     fields_for("release[#{prefix}_track_attributes][]", track, &block) 
    end 

    def fields_for_track_link(track_link, &block) 
     prefix = track_link.new_record? ? 'new' : 'existing' 
     fields_for("track[#{prefix}_track_link_attributes][]", track_link, &block) 
    end 

    def add_track 
     track = Track.new 
     track.track_links.build 
     link_to_function 'Add Track' do |page| 
      page.insert_html :bottom, :tracks, :partial => 'track', :object => track 
    end 
end 

    def add_track_link(name) 
     link_to_function "Add Track Link" do |page|  
      page.insert_html :bottom, name, :partial => 'track_link', :object => TrackLink.new 
    end 
end 
end 

Результатом является то, что каждый link_to_function работает отлично, но когда у меня есть «Добавить трек» и «Добавить трек Ссылка» функции в то же время, Ссылка «Добавить трек» link_to_function не работает. Что-то об этом, создавая функцию «Добавить трек-ссылку», бесполезно! Извиняюсь за длинную задницу! Надеюсь, это не раздражает, а кто-то может протянуть руку?

лучше, Praveen

+1

Я думаю, что видел нечто подобное, хотя я не уверен, что его вызывает. Я думаю, что я сделал, чтобы обойти это, использовать эквивалентный код прототипа для link_to_function, который нарушил мою другую ссылку. Это исправить вещи на вашем конце? Кроме того, когда у меня были подобные проблемы, ссылка была связана с функцией link_to_function, которая удаляла ранее оказанную частицу, которая вызывала что-то, что может сломаться, поэтому, возможно, стоит проверить это. – Lyudmil

ответ

1

Посмотрите на https://github.com/nathanvda/cocoon. Документы хороши, и это позволяет вам писать и поддерживать этот код. Если вам интересно узнать, как это работает, посмотрите на источник (это не слишком сложно). Удачи!

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