我有一个在加载页面时初始化的DataTable。一切正常。
$(document).ready(function () {
var dtTable = $('#table_pins').DataTable({
"order": [],
"columnDefs": [
{ className: "dt-nowrap", "targets": [4] },
{ "targets": [1, 2], "visible": false, "searchable": false }
],
"bFilter": true,
rowReorder: {
selector: 'td:nth-child(2)'
},
responsive: true
});
dtTable.on('search.dt', function(){
reloadMarkers();
});
});
在搜索事件中,我需要再次遍历行并更新映射图钉,因此需要访问DataTables实例。我尝试过:
function reloadMarkers() {
$('#table_pins').DataTable().rows().iterator('row', function(context, index){
var data = $(this.row(index).data());
});
}
但是我得到这个错误:
DataTables warning: table id=table_pins - Cannot reinitialise
DataTable. For more information about this error, please see
http://datatables.net/tn/3
我查看了文档,并在初始化时添加了"retrieve": true
,但仍然出现错误。自实例初始化以来,为什么不检索实例?
答案 0 :(得分:0)
您的初始错误
DataTables警告:表ID = table_pins-无法重新初始化 数据表。有关此错误的更多信息,请参见 http://datatables.net/tn/3
是由于您试图在同一DOM元素上调用DataTable构造函数(如注释中所述),而不是访问已经存在的DataTable实例引起的
$('#table_pins').DataTable().rows().iterator('row', function(context, index){
您的undefined
错误很可能是范围问题-也许您的reloadMarkers()
定义位于$(document).ready()
回调之外(如果没有更广泛的代码示例,则无法确定。>
目前还不清楚您要使用reloadMarkers()
实现什么。
我建议您将reloadMarkers()
更改为以下内容:
function reloadMarkers() {
dtTable.rows({search:'applied'}).every(function(){
//do what you wanted to do with your row data, index,
//using this.data(), this.index() methods
});
}
请记住,应将其放在$(document).ready()
内。
或者,更好的方法是,如果您在表搜索之外的其他情况下不调用该函数,则可以使代码更简单,并将函数主体放在search
事件回调中。