gpt4 book ai didi

javascript - Rails 数据表选择过滤器

转载 作者:行者123 更新时间:2023-11-27 22:54:38 24 4
gpt4 key购买 nike

我的 SKU 有一个 ajax 数据表。为此,我使用 ajax-datatables-rails gem。搜索和排序工作完美,但现在我试图向我的表添加过滤功能,但它似乎没有做任何事情。我用这个例子作为过滤器函数:https://datatables.net/examples/api/multi_filter_select.html 。在示例中,选择框绘制在页脚中,但对我来说页脚是空的。就像代码根本没有运行一样。我也没有收到任何错误。

我在 Coffeescrip 文件 (assets/javascripts/vendor_skus.js.coffee) 中初始化数据表,因此我必须将其转换为 Coffeescript。我没有使用 Coffeescript 或使用 ajax 与 Rails 的经验,所以我有点迷失了什么问题。

我如何解决我的问题:

标准选择框对于我的情况来说是有问题的,因为我在表中使用 AJAX,并且选择框似乎只能在客户端表上正常工作。我决定制作自己的自定义过滤器,而不是使用标准选择框。这些是常规选择框,如下所示:

<%= select_tag "store-id", options_from_collection_for_select(@stores, "id", "name"), include_blank: true, class:"store-id form-control" %>  
<%= select_tag "status", options_for_select([ "Open", "On Hold", "Cancelled", "Closed", "Error" ]), include_blank: true, class:"form-control", multiple:true %>

这是我的 CoffeeScript ,用于使 jQuery 将参数提交到服务器并在更改时重新加载表:

$ ->
$('#orders-table').DataTable
processing: true
serverSide: true
retrieve: true
pageLength: 50
title: 'orders'
lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]]
ajax: data: (d) ->
d.store_id = $('#store-id').val();
d.status = $('#status').val();
return

$ ->
$('#store-id').on 'change', ->
$('#orders-table').DataTable().ajax.reload()
return

$ ->
$('#status').on 'change', ->
$('#orders-table').DataTable().ajax.reload()
return

在 Controller 中,确保将参数传递到数据表,如下所示:

respond_to do |format|
format.html
format.json { render json: OrderDatatable.new(view_context, { store_id: params[:store_id], status: params[:status] }) }
end

然后在数据表文件中,使用参数来过滤结果。在本例中,我对状态使用多重选择,因此当选择空白值时,params[:status].present?结果为真。这就是为什么我添加了一个检查来查看第一项是否为空字符串。

  def get_raw_records
# insert query here
query = Order.all
query = query.status(params[:status]) if params[:status].present? && (params[:status].count == 1 && params[:status][0] == "") == false
query = query.store(params[:store_id]) if params[:store_id].present?
query.joins(:store)
end

最佳答案

我在实现这个时遇到了同样的问题。我发现问题出在这一行:

column.search((if val then '^' + val + '$' else ''), true, false).draw()

CoffeeScript 不喜欢以下内容:

, true, false

像这样删除它后:

column.search(if val then '^' + val + '$' else '').draw()

一切顺利。需要注意的是,我不是一个 javascript/coffeescript 人,所以结果造成的负面影响超出了我的范围。但和你一样,我目前正在努力让所有结果出现在可选择的下拉过滤器中。它仅显示当前数据页中的任何唯一值 - 这没有帮助。

仅供引用,要使分页正常工作,请转到 datatable.rb 文件并取消注释指向您正在使用的分页的顶部的正确行。我使用“will_paginate”进行引导,所以我的看起来像这样:

  include AjaxDatatablesRails::Extensions::WillPaginate

希望有帮助。偶然,您是否找到了一种在选择过滤器中显示所有结果的方法?

关于javascript - Rails 数据表选择过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37738430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com