首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4通过escape_javascript以部分方式呈现集合

Rails 4通过escape_javascript以部分方式呈现集合
EN

Stack Overflow用户
提问于 2014-10-28 00:02:09
回答 1查看 3K关注 0票数 0

我有以下代码,我想通过javascript (通过AJAX的Kaminari分页)来呈现:

代码语言:javascript
复制
<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代码,但它根本不起作用:

代码语言:javascript
复制
$('#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方法中呈现上面的代码,我很乐意听到!

我从上面得到的错误是:

代码语言:javascript
复制
ArgumentError - wrong number of arguments (0 for 1)

当我在js.erb代码片段中尝试使用稍微不同的行(没有',job: j')时,我得到:

代码语言:javascript
复制
NameError - undefined local variable or method `job' for #<#<Class:0x

*基于下面Blelump的建议,我将代码更改为以下代码*

代码语言:javascript
复制
<div id="jobs">
  <%= render partial: "jobs/job_panel", collection: @jobs, as: :job %>
</div>

这在没有AJAX的情况下工作得很好(这实际上是在Rails中呈现集合部分的正确方式,这是我之前的错误)。但是,当我将js.erb文件调整为这样时,我仍然得到一个错误:

代码语言:javascript
复制
$('#jobs').html('<%= escape_javascript(render partial: "jobs/job_panel", 
                                           collection: @jobs, 
                                                   as: :job) %>');

错误再次来自Kaminari:

代码语言:javascript
复制
NoMethodError - undefined method `current_page' for nil:NilClass:
  kaminari (0.16.1) lib/kaminari/helpers/action_view_extension.rb:18:in `paginate'
EN

回答 1

Stack Overflow用户

发布于 2014-10-28 00:14:06

尝试:

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

或者更简单,呈现集合

代码语言:javascript
复制
$('#jobs').html('<%=raw escape_javascript(render :partial => "jobs/job_panel", :collection => @jobs, :as => :job) %>');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26591721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档