Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何动态生成动态项?_Javascript_Ruby On Rails_Dynamic_Rails Generate - Fatal编程技术网

Javascript 如何动态生成动态项?

Javascript 如何动态生成动态项?,javascript,ruby-on-rails,dynamic,rails-generate,Javascript,Ruby On Rails,Dynamic,Rails Generate,我正在寻找一种使用javascript在javascript中附加元素的方法。基本上我有两个项目清单。其中一个具有使用link_to_remote的添加按钮的项目列表,另一个具有使用link_to_remote的删除按钮的项目列表。当我单击“添加”按钮时,它会立即将项目放入其他列表中。但是,我需要能够让新插入的项执行删除的反向操作 除此之外,我看不出有什么办法,可能是创建一个partial来呈现一个非对象来动态生成这种性质的动态项。您可能正在寻找一些javascript模板解决方案。查看此链接

我正在寻找一种使用javascript在javascript中附加元素的方法。基本上我有两个项目清单。其中一个具有使用link_to_remote的添加按钮的项目列表,另一个具有使用link_to_remote的删除按钮的项目列表。当我单击“添加”按钮时,它会立即将项目放入其他列表中。但是,我需要能够让新插入的项执行删除的反向操作


除此之外,我看不出有什么办法,可能是创建一个partial来呈现一个非对象来动态生成这种性质的动态项。

您可能正在寻找一些javascript模板解决方案。查看此链接

希望这能回答您的问题。

警告:黑客解决方案

我有一个选择列表,需要从中动态添加和删除元素。两者都是AJAX调用

控制器方法呈现一个包含Javascript的部分,以从选择列表中添加和/或删除项目。与任何其他分部一样,分部是一个普通的旧erb文件,它插入从列表中对象的对象ID生成的适当DOM标识符

我看了一些Javascript模板解决方案,但没有一个足够灵活。最后,自己生成Javascript更容易。

您签出了吗?它是一个流行的JavaScript库。它完全可以轻松地完成您描述的任务。我已经用了很多年了,它从来没有让我失望过

显示append方法。你可以做像

$("span").appendTo("#foo");
$span部分查找DOM的一个或多个元素,然后appendTofoo部分将其附加到DOM的另一个元素

您还可以附加任意的HTML片段。如果需要,可以通过AJAX请求检索这样的代码片段。jQuery具有非常简单和可靠的AJAX支持


使用jQuery,基本概念是将JavaScript方法绑定到单独的.js文件中的DOM元素,而不是在这个或那个属性上使用HTML。因此,如果在这种情况下使用jQuery,就不会考虑通过模板生成JS代码。add和remove函数将位于.js文件中,您可以根据需要将它们绑定和解除绑定到DOM元素。例如,当您将li添加到列表中时,您需要从li中解除add函数的绑定,并将remove函数绑定到它。

这相当容易。有很多事情可以帮您完成,请查看jquery

不久前我手工编写了一些代码,很抱歉代码写得很糟糕。它可以从播放列表中添加和删除曲目

控制器:

容器:

添加内容:

<%session[:admin_playlist_tracks].each do |recording_id|%>
        <div style="margin-bottom:4px;">
            [<%=link_to_remote "Remove", 
                                    :url => {:controller => :playlists, :action => :remove_track, :recording_id => recording_id}, 
                                    :update =>"all_tracks"%>]
            <%recording = Recording.find_by_id(recording_id)%>                      
            <%=recording.song.title%> <br />
            by  <%=recording.artist.full_name%> (<%=recording.release_year%>)
        </div>                  
    <%end%>
显示/删除内容:

<%session[:admin_playlist_tracks].each do |recording_id|%>
        <div style="margin-bottom:4px;">
            [<%=link_to_remote "Remove", 
                                    :url => {:controller => :playlists, :action => :remove_track, :recording_id => recording_id}, 
                                    :update =>"all_tracks"%>]
            <%recording = Recording.find_by_id(recording_id)%>                      
            <%=recording.song.title%> <br />
            by  <%=recording.artist.full_name%> (<%=recording.release_year%>)
        </div>                  
    <%end%>
这对我很有用,因为我可以使用会话变量。但是要小心!在某些情况下,用户将拥有具有相同窗体的各种窗口,这肯定会中断,因为将对会话变量进行并发访问


因为我也在做一些自动完成的工作,所以缺少了一些部分,但我希望这将有助于你了解大局。

是的,这就是我目前正在做的。它似乎工作正常,我只是希望我能想出一个办法,使它从一个部分回来。如果可能的话,在控制器中使用helper方法的正确语法并不直观。谢谢。谢谢所有这些,但我只是尝试使用Rails和Rails帮助程序来实现这一点。如果没有办法的话,我会选择JS路线。目前,我只是简单地使用partials来处理所有事情,但我希望能够从render:update部分进行处理。再次感谢。
<%= link_to_remote  "Add", 
                                :url => {:controller => :playlists, :action => :add_track, :recording_id => recording.id}, 
                                :update =>"all_tracks",
                                :complete => visual_effect(:highlight, 'all_tracks') %>
<%session[:admin_playlist_tracks].each do |recording_id|%>
        <div style="margin-bottom:4px;">
            [<%=link_to_remote "Remove", 
                                    :url => {:controller => :playlists, :action => :remove_track, :recording_id => recording_id}, 
                                    :update =>"all_tracks"%>]
            <%recording = Recording.find_by_id(recording_id)%>                      
            <%=recording.song.title%> <br />
            by  <%=recording.artist.full_name%> (<%=recording.release_year%>)
        </div>                  
    <%end%>