【问题标题】:Nested insert_html bug : Ruby On Rails & Javascript嵌套的 insert_html 错误:Ruby On Rails 和 Javascript
【发布时间】:2009-04-23 22:07:10
【问题描述】:

大家好!这个问题快把我逼疯了!这似乎是 Rails 渲染 JS 的一个错误,但我不确定。

简介:

我正在尝试创建一个包含多个轨道的 RELEASE。这些 TRACKS 有许多 TRACK_LINKS。然后这些 TRACK_LINK 具有关联的 TRACK_LINK_TYPE(mp3、m3u、播客等)。把它想象成一张专辑。因此,在添加版本时,您可以添加专辑曲目,并且每个专辑曲目可以有不同的链接(mp3、m3u、播客等)。我处于非常早期的阶段并利用脚手架 - 用户可以在表单上创建发布,通过 JS 添加轨道并通过 JS 添加轨道链接。这一切都很好 - 但是当我在代码中有“添加轨道链接”功能时,添加轨道不起作用!它静默失败 - 没有错误,只是转到 # 锚点。

在主发布表单中,我正在渲染 TRACK 部分并添加链接以添加 TRACK:

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

<%= add_track -%>

现在在 TRACK 部分中,我正在渲染 TRACK_LINK 部分并添加链接以添加 TRACK_LINK:

<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都可以正常工作,但是当我同时拥有“Add Track”和“Add Track Link”功能时,“Add Track”link_to_function就不起作用了。渲染“添加轨道链接”功能的一些东西把它搞砸了!为长篇大论道歉!希望它不烦人,有人可以帮忙吗?

最好, 普拉文

【问题讨论】:

  • 我想我见过类似的东西,尽管我不确定是什么原因造成的。我想我为解决这个问题所做的就是对破坏我的另一个链接的 link_to_function 使用等效的原型代码。这能解决你的问题吗?此外,当我遇到类似问题时,是 link_to_function 删除了先前渲染的部分导致事情中断,因此检查一下可能是值得的。

标签: javascript ruby-on-rails


【解决方案1】:

看看https://github.com/nathanvda/cocoon。文档很好,它可以节省您编写和维护此代码的时间。如果您有兴趣了解它的工作原理,请查看源代码(它并不太复杂)。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多