Javascript 选择具有相同操作的不同js文件
我在我的项目索引页面上有一个下拉列表,它使ajax调用索引操作:Javascript 选择具有相同操作的不同js文件,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我在我的项目索引页面上有一个下拉列表,它使ajax调用索引操作: def index @projects = sorted_projects # sort projects on basis of dropdown selection respond_to do |format| format.html format.js { render 'populate_projects' } end end def index @
def index
@projects = sorted_projects # sort projects on basis of dropdown selection
respond_to do |format|
format.html
format.js { render 'populate_projects' }
end
end
def index
@projects = sorted_projects
@projects = @projects.paginate(page: params[:page], per_page: 9)
respond_to do |format|
format.html
format.js { render 'populate_projects' }
end
end
我的populate_projects.js.haml文件是:
:plain
$("#sorted").html("#{escape_javascript render(partial: 'projects/projects_list')}");
$("#normal").hide();
$("#sorted").show();
这很好(ajax代码与此无关)。但现在我想在同一个页面上添加无休止的滚动。因此,首先我在索引操作中添加了分页:
def index
@projects = sorted_projects # sort projects on basis of dropdown selection
respond_to do |format|
format.html
format.js { render 'populate_projects' }
end
end
def index
@projects = sorted_projects
@projects = @projects.paginate(page: params[:page], per_page: 9)
respond_to do |format|
format.html
format.js { render 'populate_projects' }
end
end
我的ajax部分正在工作,但在调用之后,我需要执行index.js.haml:
$('#normal').append("#{escape_javascript render(partial: 'projects/projects_list', :locals => {:projects => @projects})}");
- if @projects.next_page
$('.pagination').replaceWith("#{escape_javascript will_paginate(@projects)}");
$('.pagination').hide()
-else
$('.pagination').remove();
所以,现在的问题是,当分页正在进行ajax调用时,我如何告诉index action呈现'index.js.haml',但当下拉菜单使ajax呈现所有它应该呈现的'populate.js.haml'时,您可以轻松地向ajax调用添加一个参数(例如,
:tab
),该参数告诉您应该更新哪个选项卡。要定义是否应附加或替换HTML,只需在控制器中的任意位置选中params[:page]
:
format.js do
if params[page]
render 'populate_projects'
else
render 'index'
end
end
…或在视图中:
- if params[:page]
$("#{params[:tab]}").append()
- else
$("#{params[:tab]}").html()
(只有一个视图!)
起初我认为,一个页面上有2个分页,但似乎只有filter+分页
但我仍然不清楚,为什么要使用#sorted
和#normal
div,实际上,populate_projects.js
和index.js
之间的唯一区别是为了什么目的创建了两个js文件,作为选项卡的名称
让我提出另一种方法 Rails呈现JavaScript的方式在我看来不是最好的,所以我会编写简单的js来添加和替换数据,并将其与索引操作分离 起初,我只使用一个div来呈现数据(可能还有很多选项卡、过滤器等等)。然后我将通过ajax传递
layout:false
,并呈现没有布局的索引操作,然后将结果插入div
然后是过滤器:
$.ajax
url: 'projects.html'
data:
layout: true
success: (data)->
('#container_with_projects').replaceWith(data)
和用于分页:
$.ajax
url: 'projects.html'
data:
layout: false
success: (data)->
('#container_with_projects').append(data)
使这些js过程独立将允许您在项目的不同部分使用相同的方法,而如果语句导致代码不清楚,则创建无用的
。谢谢你的名字。你是对的,没有必要使用不同的“#正常”和“#排序”。