4
我代表我想补充以下功能启用历史API与数据表
- 如果
/releases?query=<query>
,该dataTable
将发布的名单,我需要保持跟踪与该URL/releases
在页面上dataTable
对象与提供的查询 - 如果用户改变搜索词的
query
参数更新初始化 - 在浏览器中的前进和后退按钮进入相应的查询
到目前为止,我能够做第2个,但是当我听popstate
事件时,重绘表格会触发pushState
,我无法弄清楚如何防范。这里是我到目前为止的代码:
$(document).ready(function(){
var prevSearch;
var table = $('#releases').dataTable({
"bJQueryUI" : true,
"sPaginationType" : "full_numbers",
"iDisplayLength" : 50,
"oSearch": {"sSearch": '#{params[:query]}'},
"fnDrawCallback": function(oSettings) {
var curSearch = oSettings.oPreviousSearch.sSearch;
if (!prevSearch) {
prevSearch = curSearch;
} else if (curSearch != prevSearch) {
console.log("changed to: " + curSearch);
history.pushState({query: curSearch}, "title", "releases?query=" + curSearch);
prevSearch = curSearch;
}
}
});
window.addEventListener("popstate", function(e) {
if (e.state) {
table.fnFilter(e.state.query);
}
});
});
请注意,我用的是rails
后端,这是内联的JavaScript页面被服务。
我一直在寻找另一个更合适,回调放在pushState的代码,但我似乎无法找到一个。我最终实现了类似于第二个解决方案的解决方案,但我非常感谢帮助您找到适当的回调解决方案。 – sguha
用户在哪里输入搜索词?我假设它是一个输入。表格会在他们的时间或按下回车键时被更新吗?无论哪种方式,您可以将事件侦听器绑定到该输入框,并将您的pushstate函数移动到那里 – mkoryak
这是一个很好的建议,但我希望能够使用可数据API的一部分。我不想涉及到数据表插件控制的元素。 – sguha