Rails:仅在打开时如何才能将它动态地从db加载到引导手风琴中

麦克林布克

我现在使用Awesome Nested Set gem创建一个层次结构,我想显示该层次结构。

我有一个带有典型控制器动作的索引页

klasses_controller.rb

def index
   @klasses = Klass.where(depth: 0).order('lft ASC')
end

类/ index.rb

<div id="accordion" role="tablist" aria-multiselectable="true">
    <% @klasses.each do |klass| %>
        <%= render :partial => "klass", locals: {klass: klass} %>
    <% end %>
</div>

在索引操作中,我称部分

class / _class.html.erb

<div class="klass">
    <div class="klass-header" role="tab" id="heading-<%=klass.id%>">
      <h5 class="mb-0">
        <a data-toggle="collapse" 
           data-parent="#accordion" 
           href="#collapse-<%=klass.id%>" 
           aria-expanded="false" 
           aria-controls="collapse-<%=klass.id%>">

           <%= klass.symbol + " : " + klass.title%>
        </a>
      </h5>
    </div>

    <div id="collapse-<%=klass.id%>" 
        class="collapse" 
        role="tabpanel" 
        aria-labelledby="heading-<%=klass.id%>">

      <div class="klass-block">
         <Here is where I want to render partial for each child>
      </div>
    </div>
</div>

这是标准的手风琴,正在按原样工作。这是我的数据库很大的问题,我不想渲染任何不必要的东西。我想等到单击标题后,再异步检索我单击的类的子级,并使用相同的局部变量渲染每个子级。

我怎样才能做到这一点?有没有一种使用路线/控制器动作组合的方法,还是应该开始编写coffee / java-script?我并没有尝试重新发明轮子,所以如果有人知道一个值得欢迎的例子。

麦克林布克

这是一个棘手的问题,只是因为有很多活动部件。这是一个真正的摇头丸,但事后看来,这是很直接的。

首先,我想使用自定义控制器操作,因此我为“ children”方法添加了一条路由,该路由设置为接收ajax调用。

routes.rb

get 'klasses/:id/children', to: 'klasses#children', as: 'children_of'

klasses_controller.rb

def index
    @klasses = Klass.where(depth: 0).order('lft ASC')
end

def children
  respond_to do |format| 
      format.js {render 'children', :klass => @klass }
  end
end

该响应块期望有一个children.js.erb可以调用。

children.js.erb

$("#collapse-<%[email protected]%>").html("<%= escape_javascript(render :partial => 'klasses/children',    locals: { :klass => @klass })%>");

这是我们指定要插入新内容的div的地方,我们称为另一个局部。

_children.html.erb

<div class="child-block">
    <% children = @klass.children %>
    <% children.each do |child| %>
         <%= render :partial => 'klasses/klass', locals: { :klass => child } %>
    <% end %>
</div>

最后,我重写了_klass.html.erb部分,因此它的标题中具有一个链接,该链接将触发bootstrap的手风琴js并调用我们的新控制器动作。

_class.html.erb

<div class="klass">
    <div class="klass-header" role="tab" id="heading-<%=klass.id%>">
      <h5 class="mb-0">

    <%= link_to klass.symbol + " : " + klass.title,
                children_of_path(klass.id), 
                remote: true,
                :data => {  :toggle => "collapse", 
                            :parent => "#accordion",
                            :target => "#collapse-#{klass.id}"

                },
                :aria => {  :expanded => "false", 
                            :controls => "collapse-#{klass.id}"
                }%>
      </h5>
    </div>

    <div id="collapse-<%=klass.id%>" 
        class="collapse" 
        role="tabpanel" 
        aria-labelledby="heading-<%=klass.id%>">

    </div>
</div>

就是这样。在子块上添加一些填充,您将拥有一个漂亮的缩进层次结构,可以动态加载内容。

我确实必须为我的控制器中的自定义操作禁用跨站点请求伪造

protect_from_forgery :except => :children

如果有人知道解决方法,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在引导程序中为手风琴添加一个正号或负号?关闭手风琴时显示加号,打开手风琴时减号

来自分类Dev

单击时保持引导手风琴打开

来自分类Dev

仅在单击正确的符号时打开手风琴

来自分类Dev

如何才能同时锚定并打开Bootstrap手风琴?

来自分类Dev

如何在PrimeFaces手风琴面板中打开所有动态加载的选项卡

来自分类Dev

如何使用ReactJS和UIKit在加载时打开所有UIkit手风琴?

来自分类Dev

使用AngularJS在打开的手风琴组上从$ http.get加载

来自分类Dev

页面加载几秒钟后打开引导手风琴时,ui-grid是否为空白?

来自分类Dev

单击手风琴中具有元素id的链接时,打开JQuery手风琴

来自分类Dev

单击手风琴中具有元素id的链接时,打开JQuery手风琴

来自分类Dev

Bootstrap手风琴,单击时滚动到活动(打开)手风琴的顶部?

来自分类Dev

如何在打开另一个手风琴文本之前关闭手风琴元素

来自分类Dev

如何在打开另一个手风琴文本之前关闭手风琴元素

来自分类Dev

jQuery手风琴-如何在页面加载时默认打开第二个选项卡

来自分类Dev

Bootstrap Stay手风琴打开页面重新加载

来自分类Dev

在页面加载时按手风琴打开第一个项目

来自分类Dev

如何基于外部链接打开手风琴加载页面

来自分类Dev

如何在引导手风琴上加上减号

来自分类Dev

jQuery手风琴菜单在页面加载中打开

来自分类Dev

引导程序3中的手风琴菜单

来自分类Dev

jQuery 中的手风琴引导程序

来自分类Dev

当单击菜单栏中的A href链接时,如何在体内打开封闭的手风琴?-HTML

来自分类Dev

当我在 jQuery 中打开其他手风琴项目时,如何使同级展开项目折叠?

来自分类Dev

当手风琴打开或折叠时(转换结束)

来自分类Dev

Bootstrap手风琴在悬停时打开

来自分类Dev

打开手风琴时交换背景图像

来自分类Dev

手风琴打开和关闭时的变化

来自分类Dev

Bootstrap手风琴-在打算打开当前面板时关闭其他面板

来自分类Dev

页面加载时手风琴菜单关闭

Related 相关文章

  1. 1

    如何在引导程序中为手风琴添加一个正号或负号?关闭手风琴时显示加号,打开手风琴时减号

  2. 2

    单击时保持引导手风琴打开

  3. 3

    仅在单击正确的符号时打开手风琴

  4. 4

    如何才能同时锚定并打开Bootstrap手风琴?

  5. 5

    如何在PrimeFaces手风琴面板中打开所有动态加载的选项卡

  6. 6

    如何使用ReactJS和UIKit在加载时打开所有UIkit手风琴?

  7. 7

    使用AngularJS在打开的手风琴组上从$ http.get加载

  8. 8

    页面加载几秒钟后打开引导手风琴时,ui-grid是否为空白?

  9. 9

    单击手风琴中具有元素id的链接时,打开JQuery手风琴

  10. 10

    单击手风琴中具有元素id的链接时,打开JQuery手风琴

  11. 11

    Bootstrap手风琴,单击时滚动到活动(打开)手风琴的顶部?

  12. 12

    如何在打开另一个手风琴文本之前关闭手风琴元素

  13. 13

    如何在打开另一个手风琴文本之前关闭手风琴元素

  14. 14

    jQuery手风琴-如何在页面加载时默认打开第二个选项卡

  15. 15

    Bootstrap Stay手风琴打开页面重新加载

  16. 16

    在页面加载时按手风琴打开第一个项目

  17. 17

    如何基于外部链接打开手风琴加载页面

  18. 18

    如何在引导手风琴上加上减号

  19. 19

    jQuery手风琴菜单在页面加载中打开

  20. 20

    引导程序3中的手风琴菜单

  21. 21

    jQuery 中的手风琴引导程序

  22. 22

    当单击菜单栏中的A href链接时,如何在体内打开封闭的手风琴?-HTML

  23. 23

    当我在 jQuery 中打开其他手风琴项目时,如何使同级展开项目折叠?

  24. 24

    当手风琴打开或折叠时(转换结束)

  25. 25

    Bootstrap手风琴在悬停时打开

  26. 26

    打开手风琴时交换背景图像

  27. 27

    手风琴打开和关闭时的变化

  28. 28

    Bootstrap手风琴-在打算打开当前面板时关闭其他面板

  29. 29

    页面加载时手风琴菜单关闭

热门标签

归档