【问题标题】:Iterate through array passed from controller遍历从控制器传递的数组
【发布时间】:2013-10-01 07:11:35
【问题描述】:

我正在使用 Ruby on Rails。

这是我的视图代码,我在其中向控制器发帖,传递参数“tplangroup.id”:

             <div id="collapse">
                 <%= form_tag(tplans_collapse_tplans_path, :method => 'post', :remote => true ) do %>
                    <%= hidden_field_tag(:tplangroup_id, tplangroup.id) %>
                 <% end %>
              </div>

这是我在控制器端的代码,它解析必要的数据并返回数组“@ordered_tplans”

             def collapse_tplans
               @collapsed_tplangroup = Tplangroup.find(params[:tplangroup_id])
               tplans_from_tplangroup = @collapsed_tplangroup.tplans
               @ordered_tplans = tplans_from_tplangroup.order("favrank DESC")

               return @ordered_tplans
              end

由于我在视图中的原始表单中调用了 :remote => true,因此它将这个数组传递给一个名为“collapse_tplans.js”的文件

我的问题是:通过这个数组解析现在传递给 js 文件并在视图中显示其内容的最佳方法/实践是什么?我是否在 js 文件中使用 rails 代码来操作对象?还是我全部在 javascript/jquery 中完成?最佳做法是什么,您能否提供任何示例?

谢谢!

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby arrays


    【解决方案1】:

    真的有点取决于你想怎么做,就像所有代码一样,有很多方法可以给猫剥皮。我发现最简单的方法是将返回的 ujs 用作 erb 文件 (collapse_tplans.js.erb),然后从那里选择页面上要附加重新调整的对象的元素,然后在迭代的地方调用标准 erb 或 haml 部分可以做的很清楚。

    例如

    collapse_tplans.js.erb

    $('#my_wacky_element').append("<%= j render(:partial => 'collapse_tplans', :locals => { :ordered_tplans => @ordered_tplans }) %>");
    

    然后在 _collapse_tplans.html.erb

    <ul>
      <%= ordered_tplans.each do |tplan| %>
        <li><%= tplan.attribute %></li>
    

    【讨论】:

      【解决方案2】:

      这是一个 RailsCast,介绍如何从 rails 向 js 传递数据: http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-18
        • 2018-06-05
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        相关资源
        最近更新 更多