我正在尝试通过ajax调用更新索引页面。我遇到的唯一问题是返回的will_paginate链接的URL扩展名为.js。
这是我提出请求的coffeescript。
onSearchBoxChanged : () ->
console.log "search box changed"
console.log @view.getSearchBoxContents()
jQuery.getScript('/users.js?search=' + @view.getSearchBoxContents() )
在用户控制器中,我会回复html和javascript。
respond_to :html, :js
我也有一部分用于will_paginate链接(在_paginate.html.erb文件中)
<%= will_paginate %>
这是我的index.js.coffee文件
console.log "back from server "
console.log '<%= escape_javascript(render(@users)) %>'
userList = '<%= escape_javascript(render(@users)) %>'
console.log '<%= escape_javascript(render("paginate")) %>'
paginate = '<%= escape_javascript(render("paginate")) %>'
jQuery.publish('new_user_list_from_server', [ userList, paginate ] )
以下是控制台中打印的链接
<div class="pagination"><ul><li class="prev previous_page disabled"><a href="#">← Previous</a></li> <li class="active"><a rel="start" href="/users.js?_=1413756082270&page=1&search=j">1</a></li> <li><a rel="next" href="/users.js?_=1413756082270&page=2&search=j">2</a></li> <li class="next next_page "><a rel="next" href="/users.js?_=1413756082270&page=2&search=j">Next →</a></li></ul></div>
我可以替换所有的/users.js?与/ users?,但似乎应该有一个不那么“hacky”的方式来做到这一点。
有什么想法吗?
答案 0 :(得分:0)
我有一个类似但不完全相同的问题,我用自定义渲染器解决了这个问题。它不那么简单,但遗憾的是我需要添加的代码是在超级方法的中间,所以没有简单的方法可以使用&#34; super&#34;。此代码位于app / helpers / pagination_helper.rb中。它使用原始副本覆盖渲染器的链接方法,并在中间插入一些新代码,因此请注意它很容易受到对will_paginate代码本身的修订引入的错误的攻击。</ p>
module PaginationHelper
class Renderer < WillPaginate::ActionView::LinkRenderer
protected
def link(text, target, attributes = {})
if target.is_a? Fixnum
attributes[:rel] = rel_value(target)
target = url(target)
end
# New code here:
if @options[:path].present?
parts = target.split "?"
parts.shift
parts.unshift @options[:path]
target = parts.join "?"
end
# End of new code
attributes[:href] = target
tag(:a, text, attributes)
end
end
end
然后在视图中指定自定义渲染器并覆盖路径:
<%= will_paginate @my_models, path: my_models_path, renderer: PaginationHelper::Renderer %>