Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择具有相同操作的不同js文件_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 选择具有相同操作的不同js文件

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 @

我在我的项目索引页面上有一个下拉列表,它使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
我的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过程独立将允许您在项目的不同部分使用相同的方法,而如果语句导致代码不清楚,则创建无用的

谢谢你的名字。你是对的,没有必要使用不同的“#正常”和“#排序”。