【问题标题】:Rails 4 render collection in partial via escape_javascriptRails 4 通过 escape_javascript 部分渲染集合
【发布时间】:2014-12-22 21:03:05
【问题描述】:

我想通过 javascript 呈现以下代码(通过 AJAX 进行 Kaminari 分页):

<div id="paginator-jobs-top" class="text-center">
  <%= paginate @jobs, remote: true,
                       theme: 'twitter-bootstrap-3',
                  param_name: 'jobs',
                      params: { tab: 'jobs' },
            pagination_class: 'pagination-small pagination-centered' %>
</div>
<div id="jobs">
  <%= render partial: 'jobs/job_panel', collection: @jobs, as: :job %>
</div>
<div id="paginator-jobs-bottom" class="text-center">
  <%= paginate @jobs, remote: true,
                       theme: 'twitter-bootstrap-3',
                  param_name: 'jobs',
                      params: { tab: 'jobs' },
            pagination_class: 'pagination-small pagination-centered' %>
</div>

我正在尝试使用这个 js.erb 代码,但它根本不起作用:

$('#paginator-jobs-top').html('<%= escape_javascript(paginate(@jobs,
                                                          remote: true, 
                                                           theme: "twitter-bootstrap-3",            
                                                          param_name: "jobs",   
                                                              params: { tab: "jobs" },
                 pagination_class: "pagination-small pagination-centered").to_s) %>');

$('#jobs').html('<%= escape_javascript(render partial: "jobs/job_panel", 
                                           collection: @jobs, 
                                                   as: :job) %>');

我尝试了其他变体,但都没有奏效。如果有人知道如何在 js.erb 方法中呈现上述代码,我很想听听!

我从上面得到的错误是:

ArgumentError - wrong number of arguments (0 for 1)

当我在 js.erb sn-p 中使用稍微不同的行(没有',job:j')尝试它时,我得到:

NameError - undefined local variable or method `job' for #<#<Class:0x

**** 根据下面 Blelump 的建议,我将代码更改为此 ***

<div id="jobs">
  <%= render partial: "jobs/job_panel", collection: @jobs, as: :job %>
</div>

在没有 AJAX 的情况下效果很好(这实际上是在 Rails 中呈现集合部分的正确方法,我之前的错误)。但是,当我将 js.erb 文件调整为此时,我仍然收到错误消息:

$('#jobs').html('<%= escape_javascript(render partial: "jobs/job_panel", 
                                           collection: @jobs, 
                                                   as: :job) %>');

错误又来自Kaminari:

NoMethodError - undefined method `current_page' for nil:NilClass:
  kaminari (0.16.1) lib/kaminari/helpers/action_view_extension.rb:18:in `paginate'

【问题讨论】:

  • 你有什么错误吗?
  • 我得到的一个错误是:NameError - undefined local variable or method `job' for #:0x00000108af5330> 另一个尝试的不同错误:ArgumentError - 参数数量错误( 0 比 1)

标签: ruby-on-rails ajax partials kaminari


【解决方案1】:

试试:

$('#jobs').html('<%=raw @jobs.collect {|j| escape_javascript(render :partial => "jobs/job_panel", :locals => {:job => j}) }.join("") %>');

或者更简单,渲染一个集合

$('#jobs').html('<%=raw escape_javascript(render :partial => "jobs/job_panel", :collection => @jobs, :as => :job) %>');

【讨论】:

  • 更好但仍然无法正常工作,我已经编辑了我的原始问题以合并您的信息。
  • 看起来它来自&lt;%= paginate @elements %&gt;,如此处所述:github.com/amatsuda/kaminari/blob/master/lib/kaminari/helpers/…。您是否提供了正确的变量名称?
  • 是的,我的意思是当我关闭 'remote: true' 选项并运行它时,分页在我原来的循环方式和您提出的部分呈现集合的建议下都可以正常工作。一切正常。但是一旦我打开'remote:true'并将sn-p传输到show.js.erb,它就开始起作用了。我将添加更多代码......也许它是我正在做的其他事情。
  • 在您的控制器操作中,您使用的是request.xhr? 还是respond_to
  • 不,但根据我的经验,您可以在没有 respond_to .js 的情况下使用 Kaminari。在控制器中我只是调用:@jobs = Kaminari.paginate_array(@array).page(params[:jobs]).per(5)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 2015-04-30
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多