在这里,我尝试为“组织”列添加一个过滤器。它使用datatables库来处理表。profiles.js
文件将必要的输入传递给_status_table.erb
文件。
在profiles.js
文件中,我添加了这些额外行,
document.addEventListener("DOMContentLoaded", function() {
//existing code
if (!document.querySelector(".profiles.index, .users.admin_edit")) return;
initDataTable({ tableId: "#profilesTable", orderVal: 1, targetsVal: [0, 4] });
processCoderIdUpdate();
$(".menu .item").tab();
initDataTable({
tableId: "#profilesStatusTable",
orderVal: 1,
sortingDirection: "asc",
targetsVal: [0, 7]
});
// I added this below custom event listner for get the value from other file
$("#organizationFilterDropdown").dropdown();
// Attach the change event listener
$("#organizationFilterDropdown").on("change", function() {
var selectedOrganizationId = $(this).dropdown("get value");
// Get the table instance
var profilesStatusTable = $("#profilesStatusTable").DataTable();
// Clear any existing filters
profilesStatusTable.columns().search("").draw();
// Apply the filter to the "Organisation" column
profilesStatusTable
.columns(5)
.search(selectedOrganizationId, false, false)
.draw();
});
字符串
在_status_table.html.erb
中,我添加了这个下拉部分
<div class="ui fluid labeled search selection dropdown" id="organizationFilterDropdown" data-selected-organization="<%= @selected_organization %>">
<input type="hidden" id="organizationFilterInput">
<i class="dropdown icon"></i>
<div class="default text">Filter by Organization</div>
<div class="menu">
<% @organizations.each do |organization| %>
<div class="item" data-value="<%= organization.id %>"><%= organization.name_or_code %></div>
<% end %>
</div>
</div>
型
下面是_status_table.html.erb
的其余部分
<table id="profilesStatusTable" class="ui celled table">
<%= render partial: 'profiles/table_actions' %>
<thead>
<tr>
<th>
<div class="ui checkbox">
<%= check_box_tag 'select_all', 1, false, class: "select-all", onclick: "toggleAll(this)" %>
<label></label>
</div>
</th>
<th>Full Name</th>
<th>Role</th>
<th>Email</th>
<th>Confirmed</th>
<th>Organisation</th>
<th>Coder ID</th>
<th>Created at</th>
<th>Last Updated</th>
<th>Last Login at</th>
<th>Login Count</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<% @profiles.each do |profile| %>
<tr class="<%= cycle('row', 'alt-row') %>">
<td><%= check_box_tag 'delete[]', profile.user.id %><label></label></td>
<td><%= profile.user.full_name %></td>
<td><%= role_as_string(profile.role_key) %></td>
<td><%= profile.user.email %></td>
<td>
<span class="ui <%= profile.user.confirmed ? 'teal' : 'red'%> empty circular label"></span>
</td>
<td><%= profile.organisation.name_or_code %></td>
<td><%= profile.coder_id.present? ? profile.coder_id : 'N/A' %></td>
<td><%= localise_and_pretty_print(profile.user.created_at) %></td>
<td><%= localise_and_pretty_print(profile.user.updated_at) %></td>
<td><%= localise_and_pretty_print(profile.user.last_login_at) %></td>
<td><%= profile.user.login_count %></td>
<td>
<%= link_to admin_edit_user_path(profile.user), class: "icon-action", title: "Edit" do %>
<i class="edit icon"></i>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>
型
问题是当我从下拉列表中选择一个值时,它显示空表,我确实在onchange() function
内输入了console.log("selectedOrganizationId");
,它打印了正确的值。
我是指this部分和实现以上代码,请帮助我,如果你能
1条答案
按热度按时间pdkcd3nj1#
profilesStatusTable
没有引用,所以如果你真的要执行这个操作,它会引发TypeError: profilesStatusTable.column is not a function
。既然你说没有错误,那么这个保护子句
if (!document.querySelector(".profiles.index, .users.admin_edit")) return;
可能对你隐藏了错误,因为我不能重现你的问题。Example的数据。字符串
注意事项:
initDataTable
也不是一个在任何地方定义的函数,所以我使用了DataTables
的标准语法。onChange
函数传递给dropdown
,因为它看起来更干净,包含的相关逻辑更好;但是,您的实现将完全相同地工作。更新沿着上述问题,我后来注意到,OP试图使用
orginazation.id
作为搜索参数,但正在搜索profile.organisation.name_or_code
,因此扩展解决方案也要更改型
至
型