And*_*vey 8 ajax ruby-on-rails will-paginate
在Rails 3.2索引视图中,我呈现两个部分.
<%= render :partial => 'users/user', :locals => {:users => @happy_users} %>
<%= render :partial => 'users/user', :locals => {:users => @sad_users} %>
Run Code Online (Sandbox Code Playgroud)
在部分
<% users.each do |user| %>
Show some fields
<% end %>
<%= will_paginate users %>
Run Code Online (Sandbox Code Playgroud)
分页不起作用.
如果我改变will_paginate采取实例变量,分页工作(但错误的集合)
<%= will_paginate @users %>
Run Code Online (Sandbox Code Playgroud)
当调用partial时,如何将locals传递给will_paginate?
(我意识到我还需要传递:param_name以使用两个集合.现在我只是想让一个实例工作.)
部分通过index.js.erb呈现
$(".ajaxable-users").html('<%= escape_javascript(render("users/user")) %>');
Run Code Online (Sandbox Code Playgroud)
控制器看起来像
def index
@users = User.scoped.paginate(:page => params[:page], :per_page => 5)
@happy_users = User.happy_scope.paginate(:page => params[:page], :per_page => 5)
@sad_users = User.happy_scope.paginate(:page => params[:page], :per_page => 5)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
format.json { render :json => @users }
format.js
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何想法.
因此,根据请求情绪参数设置控制器实例变量
。
# controller
def index
@mood = params[:mood]
@mood_users = @happy_users = User.happy_scope.paginate(:page => params[:page], :per_page => 5) if @mood.blank? || @mood == 'happy'
@mood_users = @sad_users = User.happy_scope.paginate(:page => params[:page], :per_page => 5) if @mood.blank? || @mood == 'sad'
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
format.json { render :json => @users }
format.js
end
end
Run Code Online (Sandbox Code Playgroud)
确保我们将正确的当地人分派给partials:
# index.html.erb
<%= render :partial => 'users/user', :locals => {:users => @happy_users, :mood => 'happy' } %>
<%= render :partial => 'users/user', :locals => {:users => @sad_users, :mood => 'sad' } %>
Run Code Online (Sandbox Code Playgroud)
使部分情绪敏感,允许不同的 div 标签 id。还将心情放入请求网址中。
# users/user partial
<div id='<%= "#{mood || ''}users"%>'>
<% users.each do |user| %>
Show some fields
<% end %>
<%= will_paginate users, :params => { :mood => mood } %>
</div>
Run Code Online (Sandbox Code Playgroud)
这个js允许根据按下的分页链接来刷新不同div中的不同集合。
# index.js.erb
$("#<%= @mood %>users").html('
<%= escape_javascript(render(partial: "users/user", locals: { users: @mood_users, mood: @mood })) %>
');
Run Code Online (Sandbox Code Playgroud)
对于用于分页的不显眼的 ajax 链接,您需要。 Ruby - Rails 3 - AJAXinate 分页和排序
# in a generic js
$(document).ready(function () {
$(".pagination").find("a").livequery(function () {
$(this).attr("data-remote", true);
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,如果未启用 javascript 并且我们依靠 html,该解决方案甚至应该可以工作。在这种情况下,两个部分都应该重新显示,以允许不同的页面。
修改代码还可以处理优雅的 JS 回退到 HTML
控制器
# controller
def index
@mood = params[:mood]
@happy_page = @mood == 'happy' ? params[:page] : params[:happy_page]
@sad_page = @mood == 'sad' ? params[:page] : params[:sad_page]
@mood_users = @happy_users = User.happy_scope.paginate(:page => @happy_page, :per_page => 5) if !request.xhr? || @mood == 'happy'
@mood_users = @sad_users = User.happy_scope.paginate(:page => @sad_page, :per_page => 5) if !request.xhr? || @mood == 'sad'
@mood_users = @users = User.scoped.paginate(:page => params[:page], :per_page => 5) if @mood.blank?
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
format.json { render :json => @users }
format.js
end
end
Run Code Online (Sandbox Code Playgroud)
将新视图变量转发到部分本地
# index.html.erb
<%= render :partial => 'users/user', :locals => {:users => @happy_users, :mood => 'happy', :happy_page => @happy_page, :sad_page => @sad_page } %>
<%= render :partial => 'users/user', :locals => {:users => @sad_users, :mood => 'sad', :happy_page => @happy_page, :sad_page => @sad_page } %>
Run Code Online (Sandbox Code Playgroud)
我们只需要在这里传递它,就不会在部分中获取未定义的方法。
# index.js.erb (fixed HTML syntax)
$("#<%= @mood %>users").html('
<%= escape_javascript(render(partial: "users/user", locals: { users: @mood_users, mood: @mood, :happy_page => @happy_page, :sad_page => @sad_page })) %>
');
Run Code Online (Sandbox Code Playgroud)
如果单击悲伤页面链接,这将在参数中保留快乐页面,反之亦然。
# users/user partial
<div id='<%= "#{mood || ''}users"%>'>
<% users.each do |user| %>
Show some fields
<% end %>
<%= will_paginate users, :params => { :mood => mood, :happy_page => happy_page, :sad_page => sad_page %>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2339 次 |
| 最近记录: |