我有一个应用程序,它使用一个带分页的数据表。 用户在表中选择一行,然后在表下面显示一个报表。 用户可以编辑报表。 如果用户试图在表中选择另一行,而不保存任何待定的编辑,他们会被警告,并有机会回到先前选择的行,并保存更改或继续到下一行。 如果两行都显示在表格的同一页,这个功能就很好用。
但是,如果用户有未保存的编辑,而不是在同一页选择另一行,用户选择了另一页。 用户就会收到警告,并决定返回到正在编辑的行,这就不太符合我的要求了。 在这种情况下,用户成功地返回到上一个页面,但我想不出如何将之前选中的行显示为选中(尽管该行确实有选中的类)。
我在最新的代码中看到的是,在新页面中,在页面返回到上一个页面之前,行(有正确的索引)被选中了。当然,在前一个页面中选择的行并没有被选中。
在页面事件处理程序中,有两行值得关注的内容。
//return to previous page
dt_table.page(pageIndexToReturn).draw('page');
//set selection on previously selected row
dt_table.row(rowIndexToReturn, pageIndexToReturn).select();
这是整个页面事件处理程序
dt_table.on('page.dt', function () {
var info = dt_table.page.info();
var newPageIndex = info.page;
var state = dt_table.state();
var delta = (info.start-state.start)/state.length;
var pageIndexToReturn = Math.floor(Math.abs(newPageIndex - delta) );
var oldRow = getCurrentRow();
var rowIndexToReturn = $('#selectedRowIndex').val();
dt_table.$('tr.selected').removeClass('selected'); //need this here
determine(this).then(function(result) {
var enabled = result['enabled'];
if (enabled === 'true') {
showModal().then(function(save) {
if (save == 'true') {
//return to previous page
dt_table.page(pageIndexToReturn).draw('page');
//set selection on previously selected row
dt_table.row(rowIndexToReturn, pageIndexToReturn).select();
}
else {
clearSelectedReports();
}
})
}
else {
clearSelectedReports();
}
})
});
问题是为什么在上一个页面设置之前,行就被选中了?它的行为就像行选择语句是在页选择语句之前执行的?
有什么想法可以解决这个问题吗?
我添加了一个 draw 事件处理程序,它在 page 处理程序返回后被调用。 绘制事件处理程序会重置我的行选择。