2009-04-23 12 views
3

皆さん!この問題は、私を絶対に狂ってしまうのです! RailsによるJSのレンダリングのバグのようですが、わかりません。ネストされたinsert_htmlバグ:Ruby On Rails&Javascript

簡単なあらすじ:

私はトラックをHAS_MANY RELEASEを作成しようとしています。これらのTRACKSには多くのTRACK_LINKSがあります。これらのTRACK_LINKにはTRACK_LINK_TYPE(mp3、m3u、Podcastなど)が関連付けられています。それはアルバムのように考えてください。リリースを追加すると、アルバムトラックを追加することができ、各アルバムトラックは異なるリンク(mp3、m3u、podcastなど)を持つことができます。私は非常に初期段階にあり、スキャフォールディングを利用しています。ユーザーはフォーム上にリリースを作成し、JS経由でトラックを追加し、JS経由でトラックリンクを追加することができます。これはすべて正常に動作しますが、コードに「トラックリンクを追加」機能があるとトラックを追加することはできません!それは静かに失敗します。エラーはなく、#アンカーに行きます。 、私は部分的TRACK_LINKをレンダリングし、TRACK_LINKsを追加するためのリンクを追加していTRACK部分的に今

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

<%= add_track -%> 

:メインの放出形態で

私は部分トラックをレンダリングし、トラックを追加するためのリンクを追加しています:

<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_TYPEフィールドで)TRACK_LINKフィールドを作成しています:

<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が正常に動作しますが、私は持っているとき、同時に機能「トラックリンクを追加」「トラックを追加」していることです"Add Track" link_to_functionが機能しません。 "トラックリンクを追加"機能をレンダリングしているものが、それを台無しにしています!長いお尻のポストのためのお詫び!うまくいけばそれは迷惑ではなく、誰かが手を貸すことができますか?

最高、 Praveenさん

+1

私はそれが何を引き起こしているのか分かりませんが、私は類似のものを見たと思います。私はそれを回避するために、他のリンクを壊したlink_to_functionのための同等のプロトタイプコードを使用していたと思います。それはあなたの最後に物事を修正するか? また、同様の問題が発生したときには、以前にレンダリングされた部分が削除されたlink_to_functionが発生していたため、チェックする価値があります。 – Lyudmil

答えて

1

https://github.com/nathanvda/cocoonを見てみましょう。ドキュメントはうまくいき、このコードを書いて維持する手間を省くことができます。どのように動作するかを知りたい場合は、ソースを見てください(これはあまり複雑ではありません)。がんばろう!

関連する問題